Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


DI på klassnivå

Postades av 2012-03-09 14:21:27 - Per Persson, i forum systemutveckling generellt, Tråden har 4 Kommentarer och lästs av 2567 personer

Jag finner ofta behov av att låta alla objekt av en och samma klass ha tillgång till samma service. Det känns då som slöseri av både tid och minne att skicka in servicen till varje enskilt objekt. I stället vill jag skicka in det till hela klassen och låta det ligga på klassnivå.

Exempel:
Man har en webbutik med order- och kundobjekt.
Ett orderobjekt kan via en kundrepository returnera kunden som har lagt ordern.
Om man hämtar ut en följd av ordrar, t.ex. för att visa en lista över ordrar och kunderna som har lagt dem, behöver varje order ha tillgång till kundrepositoryn. Detta samtidigt som ordrarna skall fyllas i med information från databasen.

Jag har aldrig sett någon diskussion om DI på klassnivå. Är det inget som görs? I så fall, hur gör man i stället?


Svara

Sv: DI på klassnivå

Postades av 2012-03-11 21:32:45 - Niklas Jansson

Det låter som att du tänker på två problem samtidigt?

Dels att det "känns konstigt" att skicka med kundrepo till varje order, när ordrarna skapas?
Dels att det skulle vara prestandaproblem?


Vad man brukar göra är ju IoC-containers, typ något i stil med:
order.GetCustomer(){
return ioc.GetObjectForType<ICustomerRepo>().GetCustomerByID(this.CustomerID);
}

Vilket då skulle lösa första frågan.
(ioc är i praktiken en dictionary från "interface" till object.)
Jag gillar det inte, känns som singletons. Av samma anledning gillar jag inte statiska klasser, känns som singletons.

En annan variant som jag föredrar när det rör sig om "rapporter" är att skita i det och binda ihop objekten med referenser direkt - hämta alltihop som är relevant.

Håller dock med om att det känns lite vagt. Rekommendationerna slutar ganska exakt där det blir verkligt och sen blir det "det beror på".

Har du ett lite mer konkret exempel?


Svara

Sv:DI på klassnivå

Postades av 2012-03-12 17:25:48 - Per Persson

Hur når Order-objekt ioc? Injectas ioc i objekten (alt. klassen) eller är det en global variabel?

Ett litet mer konkret exempel? Jag som tyckte att mitt exempel var ganska konkret... :-o


Svara

Sv:DI på klassnivå

Postades av 2012-03-13 10:47:38 - Per Persson

En annan sak... I din exempelkod,
<code>
order.GetCustomer(){
return ioc.GetObjectForType<ICustomerRepo>().GetCustomerByID(this.CustomerID);
}
</code>
blir det inte jobbigt om ett orderobjekt skall ha en annan ICustomerRepo än den vanliga? Förlorar man inte en del av idén med dependency injection?


Svara

Sv: DI på klassnivå

Postades av 2012-03-15 17:25:41 - Niklas Jansson

>Hur når Order-objekt ioc? Injectas ioc i objekten (alt. klassen) eller är det en global variabel?

Se listan på http://en.wikipedia.org/wiki/Inversion_of_control
Vanligaste jag har sett är service locator, som i sin tur oftast är något slags globalt objekt. Hemskt obehagligt enligt mig. (Ofta kan man välja mellan olika sorter i ett lib, och att dessutom kunna injecta är relativt vanligt.)
Tycker hela konceptet är överabstraherat, det underliggande problemet är inte så komplicerat.


>blir det inte jobbigt om ett orderobjekt skall ha en annan ICustomerRepo än den vanliga? Förlorar man inte en del av idén med dependency injection?

Yes, i allra högsta grad. Därför jag hatar det.
Brukar väl finnas något sätt att speca vilken "specialvariant" man vill använda också, visserligen.

Fast samma brist får du ju om du skulle ha en klass-DI, inte sant?

--

Sen skulle jag inte säga att det i sig är en speciellt viktig del. Jag förespråkar framförallt isolering av delar från varandra, som viktigaste effekten av vettigt användande av DI.
Dependency Injection är ju egentligen inget annat än den vanligaste användningen av interfaces (som i sin tur är den vanligaste användningen av arv i C++-familjen).


Alltså; kan man låta all kommunikation mellan arkitekturellt logiska delar ske via små gemensamma interfaces så har man förhoppningsvis en ganska tydlig struktur. Kan man utkristallisera kontentan av en enhet i ett litet interface så är den förmodligen hyfsat genomtänkt, utbytbarheten är trevlig men används i min erfarenhet relativt sällan i praktiken.
Ser man dessutom till att anropa metoder på interfacen enligt DI (kan knappt se hur man gör för att inte följa det längre...), och inte nånsin referera till en konkret implementation så har man nästan garanterat bra "testbarhet" också.


(Konkret = kod =D)


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 616
27 953
271 709
5 487
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies