Kui anekdooti rääkida esimest korda, siis arvatavasti on see naljakas, teisel korral juba on pool võlu kadunud, kolmandat korda kuuldes ei pruugi isegi muie enam näole tulla. Samamoodi on ka tarkavara arenduses – kui kolmandat korda ühte ja sama koodilõiku kirjutada, siis kaob muie näolt ja tuleb mõtlema hakata, kuidas struktuuri parandada. Seda eirates läheb kood hapuks ja anekdoodivestjast koomikut ei saa.
IT juht läheb ülemuse jutule ja ütleb: “Meil oleks vaja uut serverit.” Ülemus seepeale uudishimulikult küsib: “Millist?” IT juht teeb suured silmad ette ja vastab: “Kahe millist.”
Martin Fowler annab hea vihje enda raamatus “Refactoring: Improving the design of existing code”, et kolmas kord kopeerimisel on see hetk, kus tuleks ette võtta ümber struktureerimine (refactoring).
Dubleerimise vältimine on tuntud ka järgneva printsiibina: Don’t Repeat Yourself (DRY).
Enne kui kaotada igasugune koopia ära, tuleb mõelda, et kas see on tõesti vajalik. Mõnikord peabki olema struktuur dubleeritud (peamiselt siis kui sellega midagi öelda tahad). Data Transfer Object‘ite (DTO) korral oleks vale luua ühine baasklass äriobjektiga. Sellisel juhtumil on see äärmiselt väär vähemalt mu jaoks. DTO-del võivad olla jadaks teisendamisega (serialize) seotud atribuute ja äriobjektidel näiteks Object-Relational Mapper (ORM) atribuute (kuigi see ei ole kõige parem variant seoseid andmebaasi ja ärimudeli vahel luua) ning need võiksid olla eraldi. Tihtipeale on DTO objektidel ainult võtmise (getter) meetodid.
IT juht läheb ülemuse jutule ja ütleb: “Meil oleks vaja uut serverit.” Ülemus seepeale uudishimulikult küsib: “Millist?” IT juht teeb suured silmad ette ja vastab: “Kahe millist.”
Teine olukord, mis võib juhtuda dubleeringu eemaldamisel, on ideeliselt sama, mis teemanti probleem (tegelikult võibki taandada sellele). Järgnevalt jooniselt võimegi näha, et ei ole võimalik kaotada dubleeringut täielikult. Me ei saa pärida nii Type kui ka TimePeriod klassist. Siin juhtumil peame ilmselt valima ühe neist, kusjuures arvestada tuleks pigem sellega, et kas State on pigem TimePeriod või Type, mitte vaatama, kus on rohkem võimalik dubleeringut kaotada.
Siiski need probleemid ei tule ette pidevalt, pigem tuleb ette vähene abstraktsus ja dubleering. Sellegi poolest tuleb teadlik olla, millised probleemid võivad ette tulla.
IT juht läheb ülemuse jutule ja ütleb: “Meil oleks vaja uut serverit.” Ülemus seepeale uudishimulikult küsib: “Millist?” IT juht teeb suured silmad ette ja vastab: “Kahe millist.”
Selle printsiibi head küljed avalduvad peamiselt programmi käitumise muutmise korral. Lihtsam on muuta ühes kohas kui mitmes, juhul kui dubleering on eemaldatud loogiliselt. Dubleeringute otsingul Java ja .NET platvormil on abiks Simian, mis teinekord üllatab enda tulemustega. Head dubleeringu otsimist ja eemaldamist!
Loe veel sarnastel teemadel:
- Kõike, mida sa omad, ei ole sul vaja, 2. aprill
- Ilus arhitektuur, 7. august
- Programmeerija ei ole tarkvara arendaja, 10. juuli
- CruiseControl.NET uus ja ilus nägu, 22. juuli
- Ilus kunst, 25. 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)
