Вписывается ли этот пример службы репозитория сущностей в управляемый доменом дизайн? - PullRequest
0 голосов
/ 17 января 2009

Я хотел бы знать, если вы находите следующий шаблон значимым в дизайне, управляемом доменом.

Доменный слой состоит из модели и хранилища. Прикладной уровень состоит из служб, которые обрабатывают запросы из пользовательского интерфейса или из контроллеров в шаблоне Model-View-Controller.

Детали строения:

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

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

    public void SetId(int phraseId) { this.PhraseId = phraseId; }</b>
}

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

// 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(<b>new Phrase(phraseText)</b>);
        // doing other things like sending mail, logging, etc.
        // ...
        return Phrase;
    }
}

В частности, имеет ли смысл переводить метод в класс сущности Phrase? В таком случае, как это будет называться?

EDIT:

Пример выше был изменен после ответа moffdub и комментария от Adeel Ansari. Изменения выделены .

Я хотел бы спросить о добавленном IPhraseRepository.GetPhrase (фразуId) и как бы вы это включили?

Ответы [ 2 ]

1 голос
/ 17 января 2009

Репозиторий должен принимать фразу, а не строку. Я также не уверен, почему метод SavePhrase возвращает фразу. Я склонен делать такие методы недействительными.

Кроме того, будьте осторожны, чтобы у каждого свойства в вашей доменной модели были публичные методы получения и установки. Это может привести вас к анемичной модели предметной области.

0 голосов
/ 09 июля 2009

Просто некоторые мысли:

SetId (int фразуId) не должен быть публичным

Фраза может реализовывать IPhrase (или IPhraseAggregate), который не предоставляет SetId (..)

SavePhrase (Фраза фразы) может (должна?) Возвращать void, если ссылка на сущность фразы остается «действительной» после сохранения:

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
}
...