2010-08-03 3 views
0

우리의 핵심 도메인은 firstName, lastName, middleInitial 등의 메소드를 가진 PersonName이라는 추상화를 가지고 있습니다. 우리가 도메인을 스페인으로 확장 할 때, 우리는 이름, firstSurname 및 secondSurname, 즉 middleInitial 등의 용어로만 대화한다는 것을 알았습니다 그들에게 의미.API의 제한 사항을 처리하는 가장 좋은 방법은 무엇입니까?

현재 PersonName 인터페이스는 현재 API의 여러 위치에서 사용되고 있으며 SpainPersonName도 같은 위치에서 사용해야합니다. 그래서, 내 옵션은 PersonName에서 SpainPersonName을 확장하는 것입니다. 하지만, 이렇게하면 스페인 도메인에 적용 할 수없는 firstName, middleInitial 등의 API를 노출하게됩니다.

제 질문은 어떻게 이전의 호환성을 유지하면서 현재의 추상화를 리팩토링 할 수있는 가장 좋은 방법입니까? 모든 리팩토링 또는 디자인 제안은 대단히 감사하겠습니다.

+0

Pangea - 프레젠테이션 (viewmodel) 레벨에서 사용하거나 DAL 매핑 개체에 대해 이야기하고 있습니까? 나는 뷰 모델을 상상하고 있지만 확실하고 싶다. –

+0

이것은 핵심 비즈니스 도메인이며보기 레이어가 아닙니다. –

답변

1

귀하의 질문에 대한 확신이 없습니다. "PersonName에서 SpainPersonName을 확장하려면", SpainPersonName을 구현하거나 PersonName에서 상속받는 것을 의미합니까?

어쨌든 PersonName 추상화에 결함이있는 것으로 추측합니다. 추상화는 적어도 그것이 적용되는 상황에 널리 적용될 수 있어야합니다. 맞습니까? 우리 스페인 사람은 성 (姓)과 성 (성)을 생각하지 않습니다. 어쩌면 추상화를 다시 생각해야 할 필요가있을 것입니다. 내 경험에 따르면, GivenName과 FamilyName을 기반으로 한 추상화는 이름의 순서가 "보통"이 아닌 아시아 문화에서도 가장 널리 적용되는 개념입니다.

건설적인면에서 스페인 성 첫 번째 성 및 두 번째 성을 추상 성으로 매핑해야한다고 생각합니다. 성 (first and second surnames)은 스페인 사람이 우리의 성으로 생각하기 때문입니다. 당신이 그것을 할 수 있다면, 당신은 받아 들일 만하게 잘하고 있습니다.

+0

예 SpainPersonName은 PersonName을 확장합니다. 그리고 추상화가 깨 졌음을 알고 있지만 고객이 이미 기존 API를 사용하고 있기 때문에 추상화를 변경하기에는 너무 늦었습니다. 내 질문은 우리가 현재의 추상화를 리팩터링하여 역 호환성을 유지하는 최선의 방법이다. –

+0

글쎄, 리팩토링이란 무엇인가를 바꾸는 것을 의미합니다! PersonName을 변경할 수 없다면 리팩토링 할 수 없습니다. 너는 그걸로 붙어있다. 당신이 할 수있는 유일한 방법은 그것을 그대로 사용하고 SpainPersonName 구현에 초점을 맞추는 것입니다. 그게 네가하려는 계획이야? – CesarGon

+0

예. 나는 지금 당장 붙어있다. 따라서 나머지 doamin API와 잘 작동하려면 내 SpainPersonName이 PersonName에서 확장되어야합니다. 그래서 getFirstSurname(), getSecondSurname() (유비쿼터스 언어)와 같은 새로운 메소드를 추가하고 getMiddleInitial()과 같은 스페인 도메인과 관련이없는 메소드에서 UnsupportedOperationException을 던져 주시겠습니까? 또한 이름 추상화를 나타내는 이상적인 방법은 무엇입니까? givenName과 FamilyName처럼 말하고 있습니다. 참조 문서를 참조 할 수 있습니까? –

1

PersonName을 AngloPersonName으로 변경하고 PersonName 인터페이스를 생성해야하는 것처럼 들리십니까?

관련 문제