Вписывается ли этот пример Службы репозитория сущностей в дизайн, ориентированный на домен?

StackOverflow https://stackoverflow.com/questions/452517

Вопрос

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

Уровень домена состоит из модели и репозитория.Прикладной уровень состоит из служб, которые обрабатывают запросы из пользовательского интерфейса или от контроллеров в шаблоне Модель-Представление-контроллер.

Детали структуры:

// Assembly Model:
public class Phrase
{
    public int PhraseId { get; Частное set; }
    public string PhraseText { get; Частное set; }

    общедоступная фраза (строка phraseText) { this.PhraseText = фразетЕкст;}

    общедоступный недействительный SetId(int phraseId) { this.PhraseId = Фразеид;}
}

// Assembly Repository (references assembly Model):
public interface IPhraseRepository
{
    Phrase SavePhrase(Фраза фраза);
    Фраза 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(новая фраза (phraseText));
        // doing other things like sending mail, logging, etc.
        // ...
        return Phrase;
    }
}

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

Редактировать:

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

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

Это было полезно?

Решение

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

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

Другие советы

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

SetId(int phraseId) не должен быть общедоступным

Фраза могла бы реализовать 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
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top