Pergunta

Gostaria de saber se você encontrar o seguinte padrão significativo no domínio driven design.

A camada de domínio consiste de modelo e repositório. A camada de aplicação consiste em serviços que lida com consultas a partir da interface do usuário, ou de controladores no padrão Model-View-Controller.

Detalhes da estrutura:

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

Em particular, faria sentido para mover o método para a classe de entidade frase? Nesse caso, como teria que ser chamado?

EDIT:

O exemplo acima foi modificado após a resposta do moffdub e o comentário de Adeel Ansari. As mudanças são destacada .

Eu gostaria de perguntar sobre a IPhraseRepository.GetPhrase adicionado (phraseId) e como você incluiria isso?

Foi útil?

Solução

O repositório deve tomar em uma frase, não uma string. Eu também não sei por que o método SavePhrase retorna uma frase. I tendem a fazer tais métodos métodos vazios.

Além disso, ter o cuidado de fazer com que cada propriedade em seu modelo de domínio tem getters públicas e setters. Isso pode levá-lo a um modelo de domínio anêmico.

Outras dicas

Apenas alguns pensamentos:

setId (int phraseId) não devem ser públicos

Frase poderia implementar iPhrase (ou IPhraseAggregate) que não iria expor setId (..)

SavePhrase (frase Frase) poderia (deveria?) Volta vazia se a referência à frase estadias entidade "válido" depois de salvar:

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
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top