Nii mõnegi programmeerija jaoks lõppeb objekt-orienteeritud disain vastava keelekonstruktsioonide kasutamisega. Mõnede jaoks on isegi partial sõna .NET raamistikus väärtuslik disainivõte (genereeritud koodi jaoks küll, kuid mitte erinevate kihtide loomiseks). Siinkohal seletangi ühte lihtsat printsiipi lahti, mis lõpetab selliste ulakuste teostamise (kui seda ka jälgida).
Single Responsibility Principle
Objektil peaks olema ainult üks põhjus muutumiseks.
Tundub küllaltki lihtsa printsiibina, kuid tihtipeale rikutakse seda liiga palju.
Objekt-orienteeritud raamatutes võib näha märksõnu nagu low coupling (madal sidestus) ja high cohesion (kõrge sidusus, kohesioon, mu arvates võiks seda nimetada tiheduseks) ning viimast neist võib viia kokku selle printsiibiga. See tähendab, et printsiip suunab fookuse objekti konkreetsusele ja tihedus näitab kui palju objekti atribuutidest (meetoditest, väljadest jne) on omavahel põimunud.
Kuna näited teevad elu kergemaks, siis muster, kus seda printsiipi eiratakse on Active Record (Fowler, “Patterns of Enterprise Application Architecture”, lk 160).

Vasakul pool on Active Record mustri järgi tehtud klass. Mulle isiklikult selline lähenemine ei meeldi, sest see võib käest ära minna väga lihtsalt (kui mõnda raamistikku kasutada, näiteks Castle Active Record, siis on asi veidi parem). Paremal pool on seevastu DDD ideede järgi loodud ning äriloogika ja andmete haldamise loogika on kenasti eraldatud.
NDepend-is on olemas mõõdik, mis näitab tiheduse puudumist klassi kohta. Selle abiga on võimalik üles leida võimalikud kohad, kus veidi ümber struktureerida parema objekt-orienteeritud mudeli poole. Valem ise on järgnev:
- LCOM = 1 – (sum(MF)/M*F)
- LCOM HS = (M – sum(MF)/F)(M-1)
Where:
- M is the number of methods in class (both static and instance methods are counted, it includes also constructors, properties getters/setters, events add/remove methods).
- F is the number of instance fields in the class.
- MF is the number of methods of the class accessing a particular instance field.
- Sum(MF) is the sum of MF over all instance fields of the class.
The underlying idea behind these formulas can be stated as follow: a class is utterly cohesive if all its methods use all its instance fields, which means that sum(MF)=M*F and then LCOM = 0 and LCOMHS = 0.
Soovituslik oleks hoida neid väärtusi alla 0.8 kui meetodeid on rohkem kui 10 ja välju ka üle 10.
Head nõiajahti nendele klassidele.
Loe veel sarnastel teemadel:
- Võtame kaalust alla, 7. september
- Võõrastega ei suhelda, 16. aprill
- Avatud uuendustele, kinni muudatustele, 15. oktoober
- Iluvõtted koodile I, 7. aprill
- Modernselt tarkvara loomine II: Seotud paelad, 29. oktoober
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)
