Question

Je voudrais savoir si vous trouvez le modèle suivant significatif dans la conception pilotée par domaine.

La couche de domaine comprend un modèle et un référentiel. La couche d’application comprend des services qui traitent les requêtes de l’interface utilisateur ou des contrôleurs du modèle Model-View-Controller.

Détails de la structure:

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

En particulier, serait-il judicieux de déplacer la méthode dans la classe d'entités Phrase? Dans ce cas, comment cela s'appelle-t-il?

EDIT:

L'exemple ci-dessus a été modifié après la réponse de moffdub et le commentaire d'Adeel Ansari. Les modifications sont mises en surbrillance .

Je voudrais poser des questions sur l'ajout de IPhraseRepository.GetPhrase (phraseId) et comment l'inclure?

Était-ce utile?

La solution

Le référentiel doit contenir une phrase et non une chaîne. Je ne comprends pas non plus pourquoi la méthode SavePhrase renvoie une phrase. J'ai tendance à faire de telles méthodes des méthodes nulles.

Veillez également à ce que chaque propriété de votre modèle de domaine ait des accesseurs et des traceurs publics. Cela peut vous conduire à un modèle de domaine anémique.

Autres conseils

Juste quelques réflexions:

SetId (int phraseId) ne doit pas être public

Cette phrase pourrait implémenter IPhrase (ou IPhraseAggregate) sans exposer SetId (..)

SavePhrase (Phrase phrase) pourrait (devrait?) renvoyer une valeur vide si la référence à l'entité phrase reste "valide". après avoir sauvegardé:

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
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top