--> Till Alla: Jag svarar på eventuellt två inlägg till sen får vi nog inte ut mer av denna tråd... :) Men jag måste redan nu tacka alla här för all bra feed back jag fått! Det har varit en intressant diskussion...
--> Gladh
>Gladh: Så länge det inte händer något i OrdersRepository konstruktorn som tar väldigt lång tid eller förbrukar mycket minne, så spelar det inte så mycket roll om du skapar en ny instans vid varje anrop. Referensen till objekt släpps så fort som objektet inte "finns" längre, och GC kan städa upp efter dig. Men visst är man riktigt petig så kan det påverkar på prestandan, men det finns garanterat andra ställen som säkert behöver sig en genomkörare först...
LP: Tack för du reda ut det! För det händer ju i princip aldrig något i en repository konstruktor. Det jag vill få ned är som sagt antalet kodrader i mina servicar. Jag tycker att kodöverblicken ökar. Om man ska köra en mega loop eller om det är prestandakritiskt så kan man köra sköta instansieringen på det klassiska sättet.
Angående, "Law of Demeter", om jag lägger CreateInstance-metoden i repository strider jag då mot denna lag?
>Gladh: Låter som din integrationswrapper är väldigt komplex och där med strider mot S.R.P och/eller S.O.C, men det är ju omöjligt att veta utan att se koden, så det är rena spekulationer från min sida.
LP: Så länge den inte skapar problem utan ett mervärde så gör det inte så mycket att det strider mot olika principer och lagar. En så länge har jag inte haft några problem och som vi pratade om innan så kommer det inte vara några större problem att byta integrationslösning om man använder sig av en wrapper.
Men jag är inte helt övertygad ännu att köra CreateInstance-metoden men det känns väldigt lockande. Jaja, vi kanske kan avrunda diskussionen nu...
--> erka
>erka: Jag är nyfiken på hur jag kan tdd:a med en integrationswrapper och vad jag tjänar på det jämfört med köra DI och exempelvis RhinoMocks som mockramverk. Pseudokod please. Tråden började med ett påstående om att du inte enhetstestat repositorys så mycket så jag misstänker och om du inte enhetstestat repositorys tidigare att det inte går via din integrationswrapper, vilket i sin tur leder mig till det jag skrev tidigare om att det är helt olika typer av test och kräver sin egen lösning.
LP: Kör du TDD så är nog DI att föredra för då får du en gemensam testimplementation.
>erka: För jag har faktiskt inte fattat hur din integrationswrapper fungerar,har jag fattat det rätt om det handlar om integrationstest, där du testar anropskedjor osv, du testar ihopkopplade objekt?
LP: Det handlar inte om integrationstest. Säg för enkelheten skull att du anropar GetOrderById i din OrderRepository. Denna metod kan returnera ett mockobjekt eller ett objekt från tex databasen. Detta innebär att när du skriver ditt enhetstest för GetOrderById så kan du använda samma testmetod för dels ditt enhetstest som ditt integrationstest. På byggservern kör du sedan integrationstester medan lokalt enhetstester.
--> Nickemannen
>Nickemannen: DI betyder inte att man löskopplar till absurdum? Finns ingen som säger att vi vill göra det.
LP: Om du läser mitt svar så var det ett svar på att du inte tyckte att löskopplade system är mycket mer komplexa än motsatsen. Jag bara drog det ett steg ytterligare för att visa att du har fel för extremt löskopplade system kan bli ganska komplexa och det finns inte bara en nivå på DI utan det finns många olika nivåer man kan implementera det på.
>Nickemannen: Vad menar du när du pratar om en "renare lösning" vad är en renare lösning för dig?
LP: En renare lösning är för mig att tex domänen påverkas så lite som möjligt av saker som inte berör domänen. Lös koppling och testbarhet har tex inget med domänen att göra.
>Nickemannen: Och om det inte blir mer arbete med DI som du säger att det inte blir varför då inte använda DI istället eftersom vi i tråden har kommit fram till att det lättare går att testa med DI, samt byta ut komponenter lättare även om vi kanske aldrig vill göra det.
LP: ??? Det känns som du inte har läst tråden riktigt...
>Nickemannen: Vi kan ställa frågan såhär, vad vinner man på att använda sig av en integrationswrapper istället för DI, F12 punkten har vi vad finns det mer?
LP: Du får läsa några av de senaste svar jag skrivit till Gladh så slipper jag skriva det om igen.