Pregunta

Me gustaría saber si encuentra significativo el siguiente patrón en el diseño controlado por dominio.

La capa de dominio consta de modelo y repositorio. La capa de aplicación consta de servicios que manejan consultas desde la interfaz de usuario o desde controladores en el patrón Modelo-Vista-Controlador.

Detalles de la estructura:

// 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 particular, ¿tendría sentido mover el método a la clase de entidad Frase? En ese caso, ¿cómo se llamaría eso?

EDITAR:

El ejemplo anterior se ha modificado después de la respuesta de moffdub y el comentario de Adeel Ansari. Los cambios están resaltados .

Me gustaría preguntar sobre el IPhraseRepository.GetPhrase (fraseId) agregado y cómo incluiría eso.

¿Fue útil?

Solución

El repositorio debe incluir una Frase, no una cadena. Tampoco estoy seguro de por qué el método SavePhrase devuelve una Frase. Tiendo a hacer que tales métodos sean nulos.

Además, tenga cuidado de hacer que cada propiedad en su modelo de dominio tenga captadores y establecedores públicos. Eso puede llevarlo a un modelo de dominio anémico.

Otros consejos

Solo algunas ideas:

SetId (int fraseId) no debe ser público

Phrase podría implementar IPhrase (o IPhraseAggregate) que no expondría SetId (..)

SavePhrase (Frase de frase) podría (debería?) volverse nulo si la referencia a la entidad de frase permanece "válida" después de guardar:

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top