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 должны быть чисто поведенческими. Добавление корзины к пользователю в роли - это нарушение этой секунды. Может быть, вам не хватает типа объекта данных или роли? Помните, что роли могут использовать другие роли из контекста, поэтому, возможно, ваша роль должна просто ожидать, что объект, играющий роль корзины, будет частью текущего контекста.