Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C#] Circular reference 'nodig; kan uiteraard niet

Pagina: 1
Acties:

  • Intrepidity
  • Registratie: December 2003
  • Laatst online: 24-06-2024
Ik ben een pilotproject aan het doen waarin ik een goede meerlaags structuur wil demonstreren. Persoonlijk vind het het prettigst om de verschillende lagen vanwege overzichtelijkheid in verschillende projecten onder te brengen, en deze verschillende projecten dus te laten compilen naar een class library. Mijn solution ziet er momenteel zo uit:
Afbeeldingslocatie: http://www.intrepidity.nl/solution.png

Ik ben nu wat businesslogica aan het schrijven, en wil daarbij een functie uit het Table-project gebruiken om de databaseinteractie af te handelen. Met andere woorden, bij bijvoorbeeld het inserten van een business-object geef ik 'this' mee, en vervolgens vindt in het Table-project de conversie plaats van business-object naar databaserecord.
C#:
1
int pk = CollectePortaal.Table.GeoDef.insert(this);


Het zal duidelijk wezen dat de reference naar het Table-project nodig is om die functie aan te roepen. Echter, in het Table-project is weer een reference nodig naar de businesslogica om het type bekend te maken! Hoe kan ik dit oplossen?

Ik heb het een en ander gelezen over het Mediator pattern, maar dan is het me nog niet duidelijk hoe ik het type overal bekend maak..

  • apokalypse
  • Registratie: Augustus 2004
  • Laatst online: 19-11 03:34
Je moet zoeken naar DIP(Dependency inversion principle)

zoals:
http://www.oodesign.com/o..._inversion_principle.html

Korte samenvatting, gebruik interfaces :)

[ Voor 30% gewijzigd door apokalypse op 13-03-2008 13:30 ]


  • MrSleeves
  • Registratie: Februari 2004
  • Laatst online: 13-10 22:03

MrSleeves

You'll thank me later.

Met apokalypse. Als je een interface aanmaakt van de businesslogica in een apart project kan je beide projecten (table en de degene waar de businesslogica wordt geïmplementeerd) daar naar toe laten refereren.

30Drie Web Design & IT Consultancy | Raven Consultancy Services


  • Ruudjah
  • Registratie: November 1999
  • Laatst online: 06-09 20:58

Ruudjah

2022

DIT BERICHT IS PREVENTIEF VERWIJDERD DOOR DE GEBRUIKER

[ Voor 94% gewijzigd door Ruudjah op 01-12-2009 22:38 ]

TweakBlog


  • DrDelete
  • Registratie: Oktober 2000
  • Laatst online: 19-11 22:39
ik zou er voor kiezen om niet je blind te staren op n-layer-patterns. Probeer classes die een sterke cohesie hebben bij elkaar te zetten en eerder over te gaan naar een samensmelting in een logisch C# project dan naar gelaagdheid.

Een mooi tool om te analyseren hoe sterk de cohesie tussen verschillende classes is, is Lattix (via Dependency Structure Matrix).

Verwijderd

Je probeert een demo project voor domain driven design te maken.

Zoals de andere posters ook al zeggen: je moet het opslaan van je objecten en je businesslogica zien los te koppelen. Het persisten van je objecten naar de database moet juist los staan van je businesslogica. Met andere woorden: het is vreemd dat je in businesslogica iets opgenomen hebt wat ervoor zorgt dat je ditzelfde businessobject wilt opslaan.
Wat wel kan, is dat je eventuele onderliggende objecten wil persisten. Die zouden dan in een laag lager zitten.

Concreet: Het aanroepen(!) van de table.insert moet je niet doen binnen je business-project. Ook niet binnen je table-project zelf.

Kom je er hiermee uit?

Cheers,
Pagina: 1