DCI, должна ли роль добавлять свойства к объектам данных?

Я играл с DCI после того, как последовал вместе с "Правильным путем для кодирования DCI" в Ruby. Я обнаружил, что все время хочу, чтобы мои роли добавляли свойства в мои объекты данных.

Например, если у меня есть объект пользователя.

class User
  def initialize(name)
    @name = name
  end
end

user = User.new('JonMR')

Пользователь может играть роль клиента.

module Customer
  def add_to_cart(item)
    self.cart << item
  end
end

customer = user.extend Customer
customer.add_to_cart 'an item'

Чтобы сделать эту работу, мне нужно добавить метод корзины. Действительно ли корзина покупок принадлежит объекту пользователя? Такое ощущение, что роль должна добавить корзину к объекту данных по мере необходимости.

1 ответ

Решение

В общем случае объекты данных DCI должны состоять только из данных плюс базовая логика предметной области, например, базовая логика проверки. И роли DCI должны быть чисто поведенческими. Добавление корзины к пользователю в роли - это нарушение этой секунды. Может быть, вам не хватает типа объекта данных или роли? Помните, что роли могут использовать другие роли из контекста, поэтому, возможно, ваша роль должна просто ожидать, что объект, играющий роль корзины, будет частью текущего контекста.

Другие вопросы по тегам