Arkitektur DDL - DAL, over en webservice
Hej !!Jeg har et arkitekturspørgsmål... Jeg er ved at udvikle et større system, hvor jeg har oprettet et repository, som indeholder min BLL (Business Logic Layer).
Derudover har jeg en webservice (webservices) som fungerer som mit DAL (Data Access Layer). Ideen er nu den at både webservicen og min applikation kan benytte repositoriet. Det vil sige at webservicen gerne må kende repositoriet. Dette gør ikke noget, idet jeg gerne vil modtage/sende komplekse objekter igennem webservicen.
Mit problem er nu :
Lad os antage at jeg har oprettet et object : FooBar i repositoriet
Når jeg nu kalder en funktion i mit DAL (webservice) og forventer et objekt tilbage af typen FooBar, som oprindeligt er defineret i repositoriet, så får jeg ikke FooBar tilbage, men en type som er defineret i min Proxy, via Serialization. Lad os kalde det XBar
Dette objekt (XBar) kan jeg selvfølgelig ikke blot caste til et FooBar objekt, selvom det rent faktisk er samme objekt (data medlems-mæssigt).
I den perfekte verden gav proxyen mig et objekt magen til det som jeg har defineret i mit repository, og ikke et XBar objekt.
Jeg ser 2 muligheder at løse problematikken på :
1. Jeg laver min egen proxy, hvor jeg benytter objektet defineret i mit repository, men dette vil kræve at alle objekter i mit repository er angivet med XML attributter, for hvordan jeg ønsker et objekt serialiseret... Dette er ikke optimalt, idet jeg også igennem assemblyniveau ønsker at bruge mit objekt. Derfor vil XML attributterne være ganske overflødige.. Udarbejdelsen af Proxyobjektet er ikke triviel, og jeg ønskede selvfølgelig at Visual Studio generede denne for mig...
2. Den anden løsning jeg ser er ved at bruge en delegate, til at populere mine objekter FooBar med...
Det vil sige at når jeg får et XBar objekt fra min proxy så laver jeg en kopi, member for member..Så har jeg godt nok mit FooBar objekt.... meeeeen.
Mit spørgsmål er derfor... (langt om længe) :
Er der en fornugtig anden måde at jeg kan løse denne problematik på. Er delegate metoden den mest optimale, jeg ønsker en så løs kobling som muligt.. Hvordan beholder jeg den...
Der er forhåbentligt et menneske mere fornuftigt end jeg selv, der kan besvare dette spørgsmål !!!
/TLP