BDD: EconomyDeluxe V 0.11B online
Der er nu lagt en ny version af EconomyDeluxe op (kan findes her). Der er sket lidt hist og pist - meget refaktorering og bedre struktur samt implementation af Castle Windsor.
Et par noter om opbygningen af mappestrukturen
- To mapper - ERP og Libs. ERP indeholder nu 6 projekter, Libs indeholder 3dje parts frameworks.
- 6 projekter - Behaviour indeholder mine specifikationer og alt dokumentation. Domain indeholder implementation. Domain.Interfaces indeholder… interfaces. IOC indeholder Castle Windsor implementationen og IOC.Behaviour specifikationerne på samme. EconomyDeluxe mappen kommer til at indeholde WPF-applikationen.
For at køre integrationstestene og iøvrigt lege med data, skal følgende trin følges:
- Installation af en PostGRE sql (jeg kører 8.3, men burde virke på tidligere versioner).
- Ændring af connection-stringen i begge projekter til at pege på en ny tom database.
Tiden er primært gået med at implementere en object-factory, object-repositories samt lege med Castle Windsor og Inversion of Control. Jeg havde lidt frygtet repository. Det viste sig dog at være noget nemmere end først antaget. Indtil videre er der implementeret GetById, GetAll og Save på de to klasser, som umiddelbart kan gemmes.
Jeg har valgt en disconnected model til applikationen indtil videre. Det vil sige at jeg overhovedet ikke udnytter NHibernates mulighed for at anvende Unit of Work. Mine scenarier er simpelthen ikke så vilde, at det giver mening endnu. Det gør så samtidig at jeg er nødt til helt at undgå lazy-loads. (Eftersom sessionen lukkes umiddelbart efter at data er hentet, ‘kender’ NHibernate ikke til dataene længere).
Inversion of Control via Castle Windsor har virkelig vist sig at være nemt og dejligt at anvende. Jeg har valgt ikke at bruge den til object factory, men derimod lave min egen factory. Hovedårsagen er at Windsor er lidt for ‘effektiv’ med udledningen af konkrete klasser for min smag, da den også udleder konkrete klasser for public properties af interface-typer. Dvs. at for klasser med ValueObjects fra andre aggregater bliver udledt til en underlig bastard-værdi i modsætning til en standardværdi på null. Jeg ved godt at jeg kunne tilrette koden til at checke for det - men jeg synes det virker uelegant (desuden tog det mig under 5 minutter at lave factory’en med de få klasser jeg har med at gøre endnu).
Derudover har jeg leget en del med SharpDevelop. Jeg må indrømme at jeg bliver mere og mere fascineret af dens enkelhed og non-bloatedness. Jeg har et par krøller jeg skal have rettet ud med hensyn til at opsætte NUnit og PartCover, men det er småting, som mest er min manglende viden. Samtidig er de lige kommet med build 3437, hvor der er et par rare ting med (Extract Method som den vigtigste).
Senere skal jeg have fundet ud af at få installeret et ordentligt Refactoring modul (CodeRush skulle kunne køre med SD, men skal lige have det checket ordentligt ud) - jeg mangler et par af de rigtig dejlige produktivitetsforbedrende funktioner (auto-indsæt af using-direktiver, auto-import af libs osv.).