Это правильная модель домена? - PullRequest
0 голосов
/ 16 июля 2011

Я искал в своих книгах и в Интернете ответ на мой вопрос, но я не нашел. Может быть, вы могли бы помочь мне.

Предположим, что у меня доменный слой, рассчитанный таким образом (я думаю, что это базовая структура):

Product
IProductRepository
IProductService
ProductCalculator


class ProductService : IProductService
//..
    public List<Product> GetSimilarProducts(productId) {
        // body of this method is just an example, it doesn't have sense
        var product = repo.FindById(productId)
        repo.FindBySimilarName(product.Name);

        // some more logic
        // and more

        return similarsProducts;
    }
//..

class ProductCalculator : ICalculate
//..
    private Product _p;
    public ProductCalculator(Product p) {
        _p = p;
    }

    public double Calculate() {
            // logic..
            // calling repo
            // calling services
            // calling own class methods

            return result;
    }

//..

Итак, вопрос таков: может ли ProductCalculator использовать ProductRepository и ProductService? Или, может быть, я пойду еще дальше: это правильно спроектированный домен?

Может ли служба использовать собственные методы для решения задачи? Я собираюсь изменить ProductCalculator на Сервис, но я не знаю, правильно ли это. Я просто спрашиваю, на мой взгляд, нет.

С наилучшими пожеланиями

ps У вас есть ссылки на проекты с открытым исходным кодом (например, на github), которые стоит посмотреть на их модель предметной области?

1 Ответ

4 голосов
/ 16 июля 2011

Когда концепции модели могут искажать какой-либо объект или объект значения, услуга подходит.

Из DDD Эванса хороший сервис имеет следующие характеристики:

  • Операция относится к концепции домена, которая не является естественной частью сущности или объекта значения.
  • Интерфейс определяется в терминах других элементов в модели домена.
  • Операцияне имеет состояния

В Los Techies есть несколько замечательных статей о том, когда создавать службу.

...