[ mmix @ 29.09.2011. 20:19 ] @
Koristim Prism 4, Unity bootstrapped

Problem je sledece prirode, treba da pokupim neki ID iz komandne linije i taj ID ce biti filter za model, tj ucitace se onaj objekat ciji ID je prosledjen aplikaciji. Posto jos uvek eksperimentisem sa Prismom pretposttavljam da je cupanje command line-a iz modela no-no (uostalom ne bih ni voleo to) pa me interesuje koji je preferred way za ovo?

NApravim servis (IIDSelectorService, IDSelectorService) sa propertijem ID koji cupa iz komandne linij, onda registrujem taj servis, za model napravi konstruktor koji prima IIDSelectorService i pusitm Unity IOC da resolvuje? TO bi ucinilo da je model testable ali zar nece onda IDSelectorService biti platform dependent?
[ ravni @ 29.09.2011. 22:51 ] @
ne znam koju su razlike sto se tice parametara sa komandne linije izmedju platformi, ali mi se cini da si sebi u drugom pasusu dao sasvim dobar odgovor. doduse i sam sam tek zagrebao po tematici DI, ali bih rekao da tako nekako ide.
Citat:
TO bi ucinilo da je model testable ali zar nece onda IDSelectorService biti platform dependent?
mozda nije ni vazno, jer imas interfejs?!
[ mmix @ 29.09.2011. 23:11 ] @
Jedino sto me nervira je sto mi se polako gomilaju servisi za raznorazne gluposti i samim tim mi se povecavaju konstruktori na modelima i viewmodelima, al sta da se radi. Navigacija mi je isto malo annoying uradjena narocito ako radis single-module aplikacije.
[ logic_rabbit @ 30.09.2011. 06:54 ] @
Preporucio bi ti da koristis StructureMap mnogo je bolji od Unity-ija.
Ja sam koristio prije Unity pa sam se razocarao. Prism podrzava da zamjenis kontejner sa nekim drugim.

Ako hoces da smanjis broj parametara u konstruktoru onda mozes da koristis service locator pattern, koji svi nazivaju antipattern i kazu da ga treba izbjegavati jer ti onda kod direktno zavisi od kontejnera.
Evo ti dobar post za to od naseg covjeka :
Link

Ako imas bas previse parametara u konstruktorima, moguce da si prekrsio i single responsibility principle i da trebas odraditi code refactoring.

[ mmix @ 30.09.2011. 09:30 ] @
Pa bas zato ih i imam puno :) Aplikacija cupa podatke iz tri baze pa mi skoro svi viewmodeli imaju tri modela i po nekoliko servisa (msgbox, config, lookup tabele za proracune, itd), pretpostavljam da bih mogao da uvedem jos jedan korak izmedju viewvmodela i modela/servisa ali opet ne vidim sta bih postigao sem sto bih kompleksnost viewmodela prebacio na tu klasu, sa druge strane tek bih kombinovanjem servisa u jedan prekrsio SRP i opet mi se isto hvata za odrzavanje. GUI layout sam po sebi nije komplikovan (nalik na outlook) pa mi zato i ova elaborate navigacija ide na zivce, treba mi najosnovnija varijanta, user klikne na item u levom regionu, desni region zameni view sa nekim vezanim za taj item i mislim da cu da batalim Prism navigaciju i da uradim old-style MVVM navigaciju, samo jos da prukljuvim kako da emuliram navigaciju u regionu (tj uklanjanje starog i dodavanje novog viewa a da IOC handluje resolve), jos uvak sam nov u Prismu.

Inace Prism4 je zahtev klijenta, tako da sam se sveo na izbor izmedju Unitya i MEFa (pretpostavljam da je moguce napraviti kakav god hoces base Bootstrapper ali mi to nije cilj za ovaj prvi projekat, vise hocu da otkrijem sta je in-the-box u odnosu na basic MVVM koji mi se ne svidja). Btw, zar nije named registracija tipova i instanci u Unity-u i named resolve u stvari neki service locator pattern? Cak je i resolve na nivou interfejsa service locator pattern samo sto ga ti ne vidis jer ga Unity abstrahuje. Daleko od oka, daleko od uma?
[ logic_rabbit @ 30.09.2011. 10:31 ] @
Pa vjerovatno je i resolve na nivou interface-a service locator tamo negdje u pozadini, iako nisam gledao kod,
a ovako izgleda kao factory method. :D

Ja nisam Prism odavno koristio, jer mi nije trebala modularna aplikacija, a vecinu drugih stvari koje su valjale u Prism-u mozes naci i u nekom od poznatijih MVVM framework-a npr. EventAgreggator i sl.




[ mmix @ 30.09.2011. 10:49 ] @
cek, cek. factory pattern je samo deo price zaduzen za konstrukciju, ali sam IOC (skoro svaki koji sam video) koristi neku varijantu service locatora da bi znao koji objekat da iskoristi za mapiranje i da li da kreira novu klasu ili da iskoristi prethodno kreiranu (per instance, per container, per thread, itd). Ako npr u Unity-u imas singleton (ili per container) on ce biti faktorisan samo pri prvom resolve-u, svaki sledeci resolve je pure service locator, ne? RegisterInstance pristup cak ni ne koristi factory pattern.