[C#] Circular Dependency

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Tarabass
  • Registratie: Februari 2008
  • Laatst online: 09-04 17:02
Ik ben bezig met een solution waarin ik gebruik maak van een eigengemaakt framework project, een businesslogic project en het webapplication project. WebApplication heeft references naar het FrameWork en BusinessLogic, BusinessLogic heeft references naar het FrameWork (de managers maken gebruik van de datasource-classes ivm connections naar sql-servers) en het FrameWork heeft geen references.

Nu wil ik vanuit FrameWork gebruik maken van de managers en objecten in BusinessLogic, maar dat kan natuurlijk niet via een reference want dan krijg ik de error over Circular Dependency. Hoe ga ik dit bewerkstelligen?

Ik heb veel gelezen, maar lees enkel over interfaces. Zie niet hoe dit een oplossing zou kunnen zijn voor dit probleem.

circular_dependency.jpg
Afbeeldingslocatie: http://i5.photobucket.com/albums/y152/Tarabass/th_circular_dependency.jpg

Acties:
  • 0 Henk 'm!

  • Xiphalon
  • Registratie: Juni 2001
  • Laatst online: 16:29
Als je framework objecten nodig heeft uit je businesslaag, dan is je framework (ervan uitgaande dat het een algemeen framework is) niet abstract genoeg. Een oplossing is dan (bijvoorbeeld) om je framework interfaces te laten aanbieden die de objecten in de businesslaag implementeren.
Edit:
Ah zover was je zelf ook al. Het idee is dus dat je door middel van interfaces die je framework aanbiedt, de vereiste functionaliteit afdwingt in de object in de businesslaag, doordat die objecten de interfaces implementeren. Hierdoor hoeft je framework dus niet(s meer) te weten over de objecten in je businesslaag.

Anders haal je misschien 2 framework-typen door elkaar. De applicatieframework, welke ondersteuning levert aan alle businessobjecten en een algemeen app-framework.

[ Voor 26% gewijzigd door Xiphalon op 10-10-2010 11:48 ]


Acties:
  • 0 Henk 'm!

  • yade
  • Registratie: Mei 2002
  • Laatst online: 02-06 11:10
Er zijn twee oplossingen, of het framework en BLL laten versmelten. Of er een nieuwe laag bijmaken. Meestal noem ik die shared of common. (Of wat Darkmage zegt, misschien wel het beste.)

[ Voor 15% gewijzigd door yade op 10-10-2010 11:50 ]


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Als je cross-verwijzingen nodig hebt tussen je projecten, ben je niet echt gelaagd bezig, wat hier wel logisch zou zijn.

Ik neem aan dat FrameWork de onderste laag is en dat BusinessLogic daar op ligt, dan kun je in BusinessLogic alleen elementen uit FrameWork gebruiken en niet andersom.

Ik zou in jouw geval misschien een tussenlaag tussen FrameWork en BusinessLogic maken die elementen uit het FrameWork samenvoegt. Of je kunt de gewenste functionaliteit in BusinessLogic implementeren.

Maak anders even een schets van alle lagen en bedenk dan waar je functionaliteit het beste past.

Acties:
  • 0 Henk 'm!

  • Tarabass
  • Registratie: Februari 2008
  • Laatst online: 09-04 17:02
darkmage schreef op zondag 10 oktober 2010 @ 11:45:
Als je framework objecten nodig heeft uit je businesslaag, dan is je framework (ervan uitgaande dat het een algemeen framework is) niet abstract genoeg. Een oplossing is dan (bijvoorbeeld) om je framework interfaces te laten aanbieden die de objecten in de businesslaag implementeren.
Edit:
Ah zover was je zelf ook al. Het idee is dus dat je door middel van interfaces die je framework aanbiedt, de vereiste functionaliteit afdwingt in de object in de businesslaag, doordat die objecten de interfaces implementeren. Hierdoor hoeft je framework dus niet(s meer) te weten over de objecten in je businesslaag.

Anders haal je misschien 2 framework-typen door elkaar. De applicatieframework, welke ondersteuning levert aan alle businessobjecten en een algemeen app-framework.
En waar behoort mijn class waarin de connectie gemaakt wordt en sp's uitgevoerd worden om results terug te geven (DataSources in FrameWork)? Deze hebben ik nu namelijk samen met custom webcontrols (UI) in hetzelfde framework. Beide wil ik namelijk kunnen hergebruiken in andere solutions, waarbij ik dan enkel de dll hoef te includen. Ik heb het gevoel dat mijn denkfout daarin zit. De situatie die nu voor problemen zorgt is het volgende:

In de businesslaag zitten objecten en managers. De managers maken gebruik van de datasource-class in het framework om data op te halen uit de database en een connectie te kunnen maken. Vandaar de reference vanuit businesslogic naar het framework. Tot zover logisch. Echter zitten er nu ook custom webcontrols in hetzelfde framework die die managers in de businesslogic nodig hebben om data te kunnen binden. Daar zit dus ook mijn cross-verwijzingen. De webcontrols halen lijsten met objecten op uit de businesslogic, die dan weer connectie moet maken via het framework :)

Thanks voor de input btw :P

Acties:
  • 0 Henk 'm!

  • yade
  • Registratie: Mei 2002
  • Laatst online: 02-06 11:10
Dus je framework is een soort data access layer? Ik zou dat dan DAL noemen en controls naar de business logic verplaatsen. Als de controls niet specifiek tot deze business logic laag toebehoren dan zou ik er een nieuwe laag van maken. Of, als je framework meer business logic dan data access is de data access eruit halen.

[ Voor 20% gewijzigd door yade op 10-10-2010 22:53 ]


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Die Custom Webcontrols horen natuurlijk niet echt thuis in een hierboven genoemde Data Access Layer, wat jouw FrameWork in principe is. Web is immers een frontend en de DAL is duidelijk backend.

Je moet gewoon een aparte GUI library maken met die custom webcontrols. Dan kun je daarin natuurlijk best de DAL referencen.

Acties:
  • 0 Henk 'm!

  • Tarabass
  • Registratie: Februari 2008
  • Laatst online: 09-04 17:02
Ik ga denk ik inderdaad voor de extra laag. Die nieuwe GUI laag kan ik dan gebruiken voor alle frontend zaken, waardoor mijn framework meer een data access layer wordt. Dan heb ik twee libraries die ik ieder goed kan hergebruiken. De GUI voor web, en het framework voor zowel web als win :)
Pagina: 1