2009-02-27 5 views
2

Sagen wir, ich habe eine Methode, wie dies in meinem Business-Schicht:Welche Layer sollten Domain-Modelle sprechen?

// This is in the business layer 
public Result DeleteSomeDomainObject(????) 
{ 
    //Enforce business logic here. 

    //Delete records in the database 
    DAL. DeleteSomeDomainObject(???) 
} 


// This is in the data access layer 
public Result DeleteSomeDomainObject(????) 
{ 
    // Delete records from the database.  
} 

Sollten diese Methoden Instanzen des Domänenmodells nehmen oder einfach nur die Primärschlüssel?

Antwort

2

Ich habe oft damit zu kämpfen. Ich sage normalerweise, dass Ihre Business/Service-Schicht Domain-Objekte als Parameter annehmen sollte.

Wenn wir Web sprechen, wird Ihre Web Tier die ID haben. Es wird wahrscheinlich eine Instanz des Objekts aus der Service-Schicht instanziieren oder abrufen. Es ist also sinnvoll, es an Ihre Serviceebene zu übergeben.

Es gibt jedoch oft Zeiten, in denen Sie den Abruf des Objekts duplizieren würden. Manchmal laden Ihre Dienste ein Objekt auf Grund einiger zusätzlicher Daten, die nicht in der Webschicht erfasst wurden. Ich hatte sogar Zeiten, in denen die Datenzugriffsebene Objekte für Abhängigkeiten laden muss. Durch Caching können einige dieser Probleme gelöst werden, und durch Re-Architecture von Daten/Modellen können andere behoben werden. Bestimmt. Aber manchmal, im Hinblick auf die Leistung oder andere Probleme, macht die Weitergabe einer ID mehr Sinn.

Zusammengefasst, lieber Domänenobjekte an die Business-Tier übergeben. Aber bedenken Sie, dass es aus anderen Gründen besser ist, eine ID zu übergeben, und leider muss es Ausnahmen von Ihrer Regel geben.

1

Überall, wo es sinnvoll ist, ist es sinnvoll, die Richtlinie von der Implementierung zu entkoppeln. Ich würde sagen, wenn Sie eine Art von ORM verwenden möchten, übergeben Sie Instanzen Ihrer Geschäftsobjekte.