방금 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
그 자체를 필요로하지 않는다. 하지만 게시 용 저장소를 구현하려면 어떻게해야합니까? 같은 저장소에
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'으로 바꾼다면, 이전에 태그가 달린 게시물에 반영되어야 할 것인가 아닌가? 그렇지 않다면 그것은 값입니다. 그렇지 않으면 게시물의 컨텍스트에서 불변의 엔티티 일 가능성이 높지만 태그 관리의 맥락에서 변경 가능한 엔티티입니다. – plalx
@plalx, 답변으로 의견을 옮길 수 있습니까? 유용하고 투표하고 싶습니다. – anoam