Verwijderd schreef op dinsdag 30 januari 2007 @ 19:22:
[...]
Dat is nu net het hele idee van een meerlagenarchitectuur en al helemaal bij .NET, waar je 1 dll kan aanpassen zonder aan de rest te zitten. Alles wat met Data te maken heeft blijft lekker in de DAL... Jouw commentaar suggereert meer iets van: "Laten we alles bij elkaar gooien, want het draait toch allemaal op dezelfde machine!". Vind ik erg vreemde argumentatie. En het is overigens minimaal 3 lagen als je al een meerlagenarchitectuur wil gebruiken: Presentatie - BLL - DAL. Je praat dus zowiezo alleen tegen business objecten en nooit tegen een ormapper vanuit de presentatie, als je een applicatie goed opbouwt. Anders heeft het eigenlijk geen enkel nut om het toe te passen.
Nee je begrijpt niet wat ik bedoel. Ik heb het totaal niet over het samenvoegen van tiers/layers als in: prak de code allemaal maar achter het scherm, ik heb het over het gebruik van een bepaald type in tier A, B EN C. Jij probeert een bepaald type te vermijden in tier B en C om een mij onduidelijke reden. Het punt is dat een o/r mapper allang geen simpele persistence layer meer is maar een compleet entity management system, en dat heeft als gevolg dat je wellicht een of meerdere assemblies van dat system moet referencen in je andere tiers, maar dat is niet erg, want je gebruikt die code ook.
Dom voorbeeld horen? Databinding support code. Als ik jou mag geloven mag een entity class dus geen system.componentmodel types implementeren want die horen niet in die class thuis, toch? Dan gaat databinding niet lukken bij je, althans, niet zoals jij wilt.
2-way databinding in asp.net? Hoe? Middels objectdatasource? Of middels een datasourcecontrol die bij de o/r mapper hoort? Indien dat laatste krijg je wellicht meer features, maar moet je wel de assembly waar die code in zit referencen. Erg? Nou alleen mensen die niet snappen waar het werkelijk om gaat zeuren over dat soort zaken.
Overigens praat jij nog erg langs de Microsoft DNA lijnen. 3-tier development is vrij star en er zitten voordelen aan maar het is ook soms overkill omdat je tegenwoordig andere structuren hebt in je top tier, zoals pre-fab controllers in de vorm van datasourcecontrols, die je declaratief gebruikt en waarbij je eigenlijk een middletier overslaat. En waartoe behoort een customer entity class? BL tier, of DAL? Indien DAL, heb je dan niet in je BL tier veelal 'doorgeef classes', dus van die classes die feitelijk niet zoveel doen dan het doorsjoelen van commands naar beneden en data naar boven?
Begrijp me goed, het laatste wat ik propageer is het programmeren van logica achter een button handler of iets dergelijks, het liefst zie ik echter meer een MVC model ontstaan dan dat men puur terugvalt op een 3-tier model.
Praktijk voorbeeld: Steeds meer bedrijven spreiden hun applicaties ook fysiek. Een or mapper gaan referencen op je presentatie is dan echt not done. Data access gebeurt op de applicatie server, of zelfs op de data server en niet op de presentatie server. Je krijgt je applicatie dan meteen retour zender.
Wat probeer je mij nu uit te leggen, hoe je (ditributed) software maakt?
Jouw verhaal riekt naar klepel-klok. Een distributed applicatie is niet horizontaal gesplitst, maar vertikaal (althans, meerdere tiers). Alleen dan haal je uit je services wat er in zit. Het punt is dat bij jouw splitsingsvoorbeeld je objectgraphs heen en weer moet zenden tussen je services, wat traag is en tegen het principe indruist dat je bij service oriented architectures messaging moet gebruiken en niet het heen en weer sturen van object graphs. Het is echt dom om eerst 100.000 entities van db service naar bl service te trekken, daar dan iets te gaan doen met deze entities en dan, zeg 5.000 terug te sturen die gewijzigd zijn. Veel efficienter is dan om een service te bouwen die EN data EN manipulatie voor _die functionaliteit_ biedt op 1 machine. Dat heeft niets met het samenrapen van tiers te maken, maar met het efficient inzetten van service oriented architecture. Maar daar weet jij natuurlijk alles van
Maar, stel je splitst het horizontaal, dus BL/DAL staat op bak A en GUI staat op bak B. Dan is het onmogelijk om in de GUI iets met de database te doen, logisch, dus GUI gebruikt de BL service daarvoor op bak A. Echter, de objects geproduceerd door BL, worden bv gebruikt in 2-way databinding met een datasourcecontrol of worden gebruikt voor in-memory views met in-memory filtering en changes worden getracked in een unit of work object. Services die geboden worden door de o/r mapper code. De o/r mapper code is zo opgezet dat je WEL die services in je GUI tier kunt gebruiken maar NIET persistence kunt doen, want daar heb je een ander deel voor nodig en die staat op de BL bak.
Nu wil jij beweren dat je dan dus alles in het werk stelt om die o/r mapper code NIET te gebruiken in de GUI omdat .... ja waarom eigenlijk ? Ik hoop toch van niet.
[
Voor 0% gewijzigd door
EfBe op 31-01-2007 09:35
. Reden: scherpe kantjes er wat vanaf ;) ]