Ich mache einen neuen Thread auf, weil ich über das Thema jetzt schon eine Menge gelesen habe, jedoch alle Lösungsvorschläge im Netz ihre Nachteile zu haben scheinen.
Angenommen ich möchte eine einfache SW schreiben, die Autos verwalten soll.
Auf dem DAL habe ich dann z.B. eine Klasse "CarEntity", im BL eine Klasse "Car" und in der UI eine Klasse "CarViewModel".
Bei der UI kommt jetzt ein oData-Query an:
cars?$filter=name eq 'audi'
In meinem oData Controller kann ich das Query folgendermaßen auffangen:
public IHttpActionResult GetHouses(ODataQueryOptions<DataAccessLayer.Car> qo)
{
}
Im Objekt "qo" ist jetzt mein Query enthalten. Doch schon hier gibt es das erste Problem:
1. Weil das Query am Ende auf DataAccessLayer.Car -Objekte losgelassen werden soll habe ich keine andere Wahl als den Typ hier mit anzugeben. Mein UI-Layer soll aber die Datentypen aus dem DAL nicht kennen dürfen.
Um dieses Problem zu lösen müsste ich das ankommende Query erst einmal so umwandeln, dass es auf BusinessLayer.Car - Objekte zugreift.
Im BL müsste ich dann eine weitere Umwandlung vornehmen, die auf DAL-Objekte zugreift.
Diese Umwandlung zu schreiben ist aber ein riesiger Aufwand. Ist das also wirklich die richtige Herangehensweise?
Wenn ich nach oData + 3-Layer-Architecture suche finde ich ausschließlich Beispiele, wo es den Entwicklern egal ist und sie direkt auf den DAL zugreifen, wie ich es auch bisher gemacht habe. (z.B. OData FAQ)
Aber mir wurde hier immer wieder genau davon abgeraten...