[루비] 풍부한 모델 접근 방식, DDD 및 루비를 사용하여 주어진 작업을 올바르게 모델링하는 방법
이는 제한된 컨텍스트가 아니지만 일부 사용 사례입니다.
당신이 말한 바에 따르면 출판 및 액세스 관리라는 두 가지 제한된 컨텍스트가 있다고 생각 합니다 . 비정상적인 메커니즘을 도입하려는 경우가 아니라면 액세스 관리는 초점과 DDD가 필요하지 않은 일반적인 문제입니다. 이미이 문제를 해결하는 좋은 라이브러리를 추가하면됩니다. 그리고 일부 응용 프로그램 서비스로 포장 할 수도 있습니다.
따라서 일부 앱 서비스에는 (의사 코드, 죄송합니다. Ruby를 모릅니다)와 같은 작업을 수행하는 메서드가 있습니다.
var user = auth::authenticationService.getUser(...)
if user.hasAccessTo(articleId) then
var article = pub::articleRepo.get(articleId)
article.doSomething()
end
인증 서비스와 사용자는 하나의 컨텍스트 (auth)에 속하고 아티클과 아티클 리포지토리는 다른 (pub)에 속합니다. 그들 사이에는 작은 연결 만이 있습니다. 사용자는 pub 컨텍스트의 기사에 대해 아무것도 모르고 (ID를 저장하는 값 객체 일뿐입니다) 기사는 액세스 관리에 대해 아무것도 알지 못합니다 (하지만 그의 이름이 포함 된 값 객체가있을 수 있습니다).
또 다른 방법은 기사에 대한 역할을 나타내는 Author, Editor, Commenter와 같은 pub 컨텍스트에서 작은 개체를 소개하는 것입니다.
var role = pub::roleService.getAuthorFor(articleId, userId)
if role != null then
role.doSomethingWithArticle()
end
여기서 roleService는 auth와 pub 사이의 반부패 계층 역할을합니다 (따라서 authenticationService를 호출하고 인증 관련 항목으로 가득 찬 사용자 개체를 가져오고이를 기반으로 pub 관련 동작 만 포함하는 경량 역할 개체를 구성합니다.
두 번째 예제는 더 무겁게 들리지만 컨텍스트 중 하나에서 변경되는 경향이 더 많습니다.
출처
https://stackoverflow.com/questions/22039793