Я только начал изучать DDD. Так что извиняюсь за глупый вопрос...
Итак, у меня есть объект Post
. Это выглядит хорошо. Но он должен иметь tags
. В коде это выглядит так (рубиновый код):
class Post
attr_reader :tags
attr_reader :title
attr_reader :text
# ...
end
class Tag
attr_reader :name
attr_reader :description
# ...
end
Теги не имеют смысла как сущности. Мне не нужен сам tag
. Но как мне реализовать репозиторий для сообщений? Я нашел 2 варианта:
1. Создавайте теги в одном репозитории. Нравится:
# PostRepository
def find(id)
# getting post data from storage here
# getting tags data
Post.new(title, text, tags_data.map { |tag_data| Tag.new(tag_data[:name], tag_data[:description]))
end
Но выглядит некрасиво. Не могу четко сказать, почему.
2. Создайте отдельный репозиторий для тегов.
# PostRepository
def find(id)
# getting post data from storage here
Post.new(title, text, tag_repository.find(tag_ids)) # or tag_names or tag_something
end
Выглядит лучше. Но можно ли сделать отдельный репозиторий для объектов-значений?
Каков правильный путь согласно DDD?
UPD: С другой стороны, мне нужно получить все доступные теги. И мне никогда не приходится менять теги с сообщениями. И имя тега выглядит как личность. Может я в корне не прав? Может быть, тег - это сущность?
UPD2:
Эта проблема показывает мне, что мои дизайнерские навыки очень плохи. Из-за этого в моем вопросе два. Они есть:
- Каков правильный способ создания объекта значения внутри репозитория сущностей.
- Как увидеть разницу между значением и сущностью в моей задаче. Ведь вроде ясно. Согласно заданным условиям, тег является значением. И это нормально, что он собран репозиторием Post.
Но это состояние является результатом плохого анализа. Если бы я мог смотреть шире, я бы увидел, что у тега есть свой жизненный цикл. Хотя в контексте публикации теги неизменяемы.
ddd
, а затем вы решили переименовать его вdomain-driven-design
для будущего использования, должен ли он отражать ранее отмеченные сообщения или нет? Если нет, то это значение, в противном случае это, скорее всего, неизменяемая сущность в контексте постов, но изменяемая сущность в контексте управления тегами. - person plalx   schedule 15.04.2017