Paljud emad hoiatavad lapsi, et võõrastega suhelda ei tohi. Eriti nendega, kes kommi pakuvad. Ka koodi kirjutamisel on kasulik seda hoiatust arvesse võtta.
Law of Demeter (Principle of Least Knowledge)
Kui objekt A viitab objekt B-le, siis võib A kutsuda B meetodeid, kuid ta peaks hoiduma kutsumast meetodeid objektidel, millele viitab B.
public class Person
{
public Account Account { get; set; }
public void Block()
{
Account.State = AccountState.Disabled;
}
}
public class Account
{
public AccountState State { get; set; }
}
public class AccountState
{
public static AccountState Disabled
{
//...
}
}
Näitest võime näha, et Person klass teab liiga palju. Ta ei peaks teadma, kuidas Account klass enda olekut muudab. Alternatiivselt võime viia Block() meetodi Account alla. Kasutada saaksime seda järgnevalt:
var person = new Person(); person.Account.Block();
See ei tundu ka kõige parem moodus, sest esimese näite korral saime ainult person.Block() hakkama.
Siinkohal olekski mõistlik väikesed ümberkorraldused teha:
public class Person
{
//...
public void Block()
{
Account.Block();
}
}
public class Account
{
//...
public void Block()
{
State = AccountState.Disabled;
}
}
Näitest võis täheldada, et printsiibi vastu hakates kaob kapseldus hõlpsalt. Kui objekt-orienteerituse põhimõtteid meelde tuletada, siis kapseldamine oli üks neist. Sellest võiks järeldada, et printsiibist kõrvale kaldumine viib eemale ka objekt-orienteeritusest.
Teine häiriv osa koodist oli see, et mõned klassid teavad liiga palju. Lisades veel seoseid Personile ning käitudes printsiibi vastaselt, siis Person klassi muuta on halb ja iga muudatus ta seostes tekitab muudatusi temas.
Lisaks selline muudatuste ahel pärsib ka võõraste objektide ümber struktureerimist.
Loodan, et te ei pea selliste pikkade ahelatega tegelema (v.a. kui tegemist on ilusate liidestega).
Loe veel sarnastel teemadel:
- Võtame kaalust alla, 7. september
- Avatud uuendustele, kinni muudatustele, 15. oktoober
- Rubylik C#: Monkeypatching, 27. oktoober
- Iluvõtted testidele, 17. mai
- Iluvõtted koodile I, 7. aprill
KAIZEN FEED
Telli endale Kaizeni uudisvoog
KOMMENTAARIDE FEED
Telli endale kommentaaride voog
KAIZEN TWITTER
Lühiuudised Kaizeni autoritelt
KAIZEN FACEBOOK
Liitu Kaizeniga
MIS ON KAIZEN?
Kaizen on Saiku tarkvaraarendusealane blogi, kus kirjutame erinevatest lähenemistest meisterlikule tarkvaraarendusele.
KATEGOORIAD
- .NET (18)
- Analüüs/Arhitektuur (11)
- Arendus (66)
- Ettevalmistus (1)
- Juhtimine (2)
- Varia (24)
SILDIPILV
- .NET (41)
- ilus kood (23)
- Arendus (23)
- C# (20)
- Analüüs/Arhitektuur (14)
- Testimine (10)
- raamat (8)
- Ruby (8)
- projektijuhtimine (8)
- printsiibid (6)
- produktiivsus (5)
- ReSharper (5)
- PHP (5)
- NHibernate (4)
- objekt-orienteeritud (4)
- pidev integratsioon (4)
- Viited (4)
- agile (4)
- Java (4)
- Geekdinner (4)
- lean (4)
- raamatukogu (4)
- CI (3)
- Cruise Control.NET (3)
- Robert C. Martin (3)
- scrum (3)
- iteratsioon (3)
- suhtlus (3)
- jQuery (2)
- TechEd 2008 (2)
- Visual Studio (2)
- valideerimine (2)
- intervjuu (2)
- tööpakkumised (1)
- analüüs (1)
- ASP.NET (1)
- ümberstruktureerimine (1)
- üritus (1)
- CodeRush (1)
- dokumentatsioon (1)
- Kent Beck (1)
- LINQ (1)
- Martin Fowler (1)
- Moq (1)
- Rhino Mocks (1)
- stackoverflow (1)
- võltsitud objektid (1)
- Whiteboard Wednesday (1)
- hindamine (1)
- tarkvara kvaliteet (1)
- ajagraafikud (1)
- Saiku (1)
- koolitus (1)
- tagasivaate (1)
- koosolek (1)
- dünaamilised keeled (1)
- staatilised keeled (1)
- FluentNHibernate (1)
- facebook (1)
- aastapäev (1)
- Rake (1)
- Oredev 2008 (1)
- toyota way (1)
- raiskamine (1)
- NDepend (1)
- podcasts (1)
- väle tarkvaraarendus (1)
- raido tonts (1)
- minimal marketable feature (1)
- kasutajalugu (1)
- twitter (1)
- Joomla! (1)
- MVC (1)
- andmebaas (1)
- versioonimine (1)
- diskussioon (1)
- regulaaravaldised (1)
- motiveerimine (1)
- mõõdikud (1)
- agileestonia (1)
- riistvara (1)
- koolitused (1)
- kujundus (1)
- kodulehed (1)
- veeb (1)
