Domanda

Vorrei sapere se il seguente schema è significativo nella progettazione guidata dal dominio.

Il livello di dominio è costituito da modello e repository. Il livello applicazione è costituito da servizi che gestiscono le query dall'interfaccia utente o dai controller nel modello Model-View-Controller.

Dettagli della struttura:

// 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;
    }
}

In particolare, avrebbe senso spostare il metodo nella classe di entità frase? In tal caso, come si chiamerebbe?

EDIT:

L'esempio sopra è stato modificato dopo la risposta di moffdub e il commento di Adeel Ansari. Le modifiche sono evidenziate .

Vorrei chiedere informazioni sull'IPhraseRepository.GetPhrase aggiunto (fraseId) e su come lo includeresti?

È stato utile?

Soluzione

Il repository dovrebbe contenere una frase, non una stringa. Inoltre, non sono sicuro del motivo per cui il metodo SavePhrase restituisce una frase. Tendo a rendere tali metodi nulli.

Inoltre, fai attenzione a rendere tutte le proprietà nel tuo modello di dominio con getter e setter pubblici. Ciò può condurti a un modello di dominio anemico.

Altri suggerimenti

Solo alcuni pensieri:

SetId (int phraseId) non dovrebbe essere pubblico

La frase potrebbe implementare IPhrase (o IPhraseAggregate) che non esponeva SetId (..)

SavePhrase (Frase frase) potrebbe (dovrebbe?) restituire un valore nullo se il riferimento all'entità frase rimane " valido " dopo il salvataggio:

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
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top