Frage

Ich würde gerne wissen, ob Sie das folgende Muster sinnvoll in Domain-Driven Design finden.

Die Domänenschicht besteht aus Modell und Repository. Die Anwendungsschicht besteht aus Dienstleistungen, die Abfragen von der Benutzeroberfläche behandelt oder von Controllern in dem Model-View-Controller-Muster.

Details der Struktur:

// Assembly Model:
public class Phrase
{
    public int PhraseId { get; private set; }
    public string PhraseText { get; private set; }

    public Phrase(string phraseText) { this.PhraseText = phraseText; }

    public void SetId(int phraseId) { this.PhraseId = phraseId; }
}

// Assembly Repository (references assembly Model):
public interface IPhraseRepository
{
    Phrase SavePhrase(Phrase phrase);
    Phrase GetPhrase(int phraseId);
}

// Assembly Services (references assemblies Model and Repository):
public class PhraseService
{
    private IPhraseRepository _phraseRepository;
    public PhraseService(IPhraseRepository phraseRepository)
    {
        _phraseRepository = phraseRepository;
    }
    public Phrase SavePhrase(string phraseText)
    {
        Phrase phrase = _phraseRepository.SavePhrase(new Phrase(phraseText));
        // doing other things like sending mail, logging, etc.
        // ...
        return Phrase;
    }
}

Vor allem sei es sinnvoll, das Verfahren in die Phrase Entity-Klasse zu bewegen? In diesem Fall, wie das wäre genannt werden?

EDIT:

Das obige Beispiel wurde nach der Antwort von moffdub und dem Kommentar von Adeel Ansari geändert. Die Änderungen sind markiert .

Ich möchte über den zusätzlichen IPhraseRepository.GetPhrase (phraseId) stellen und wie würden Sie das ein?

War es hilfreich?

Lösung

Das Repository sollte in einem Satz nehmen, kein String. Ich bin auch nicht sicher, warum die SavePhrase Methode eine Phrase zurückgibt. Ich neige dazu, solche Methoden Leere Methoden.

Auch vorsichtig sein, jede Eigenschaft in Ihrem Domain-Modell zu machen haben öffentliche Getter und Setter. Das können Sie zu einem anämischen Domänenmodell führen.

Andere Tipps

Nur ein paar Gedanken:

setId (int phraseId) sollte nicht öffentlich

Phrase könnte iPhrase (oder IPhraseAggregate) implementieren, die setId nicht aussetzen würde (..)

SavePhrase (Phrase Phrase) könnte (sollte?) Rückkehr ungültig, wenn der Verweis auf den Begriff Einheit bleibt "gültig" nach dem Speichern:

public void SavePhrase(string phraseText)
{
    Phrase phrase = new Phrase(phraseText); // NOTE: keep a reference to phrase
    this._phraseRepository.SavePhrase(phrase); // NOTE: returns void

    return phrase; // NOTE: assume the repository sets the phrase.PhraseId
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top