저장소 및 서비스 인터페이스와 해당 구현 클래스의 이름을 어떻게 지정합니까?저장소 및 서비스 인터페이스의 이름을 지정하는 방법은 무엇입니까?
예를 들어 나는 Question
이라는 모델을 가지고 있습니다. 저장소 (인터페이스 및 구현) 및 서비스 (인터페이스/구현)의 이름은 무엇입니까?
저장소 및 서비스 인터페이스와 해당 구현 클래스의 이름을 어떻게 지정합니까?저장소 및 서비스 인터페이스의 이름을 지정하는 방법은 무엇입니까?
예를 들어 나는 Question
이라는 모델을 가지고 있습니다. 저장소 (인터페이스 및 구현) 및 서비스 (인터페이스/구현)의 이름은 무엇입니까?
DDD에서 명명하는 데 대략 두 가지 방법이 있다고 생각합니다.
1) 스테레오 타입 기반. 여기에 이름에 클래스 스테레오 타입이 포함됩니다. 예 :
QuestionsRepository, TaxCalculatingService etc
2) 도메인 기반. 이 접근법에서는 도메인 언어 만 사용하고 클래스 이름에는 어떤 고정 관념도 생략합니다. 예를 들어 :
Questions (or AllQuestions), TaxCalculator etc.
구현 클래스는 SqlQuestions
또는 InMemoryQuestions
같은 이름을 지정해야합니다.
나는 둘 다 시도했지만 DDD 마인드에 더 잘 맞는 것처럼 보이는 두 번째 옵션을 선호합니다. 그것은 더 가독성이 있고 더 나은 신호대 잡음비를 가지고 있습니다.
개체의 목록과 같은 저장소의 개념은 이해하기 너무 단단하지 않다 그러나 그 클래스는 방법으로 끝낼하는 것이 매우 일반적이다 : 필 CALCADO하여 저장소에 great article에서 인용되는 다음 목록과 전혀 관련이 없습니다.
유비쿼터스 언어 및 관련 패턴을 채택하는 데 많은 팀을지도 한 후, 나는 리포지토리가 DAO와 같은 수업이 아니라는 것을 기억하게하는 가장 좋은 방법은 이름으로 시작한다는 것을 알게되었습니다.
몇 년 전에 Rodrigo Yoshima는 저장소 이름을 지정할 때 그의 대회에 대해 이야기했습니다. 대신보다 일반적인 명명 스타일의 아래에 표시 :
class OrderRepository {
List<Order> getOrdersFor(Account a){...}
}
그는이 촉진 :
class AllOrders {
List<Order> belongingTo(Account a){...}
}
그것은 작은 변화처럼 보이지만 그것은 많은 도움이 ...
전체 기사는 읽고 읽고 북마크 할 가치가 있습니다.
을 한 일을 재고 개인적으로 FooService
, FooServiceImpl
, FooRepository
및 FooRepositoryImpl
를 사용합니다.
당신은 Impl
접미사 소음이라고 주장 수도 있지만
FooXxxImpl
종류의 단위 테스트를 제외하고는 코드에서 아무 곳에도 사용하지 아니 FirstFooService
및 SecondFooService
입력하기가 더 짧기 때문에'FooRepository' 대신'FooDao'를 사용합니다 : – Paul
FooService 인터페이스가 필요하지 않습니다. 구현이 하나뿐이기 때문입니다. 인터페이스의 목적은 더 많은 구현을 가질 가능성이있는 객체/컴포넌트를 모델링하는 것입니다. validationRule과 같은 몇 가지 전략 패턴. 나는 개인적으로 많은 인터페이스 과용이 있다고 생각한다. 또한 Imple sufix를 구현 한 사실로 인해 구현이 어쨌든 구체적이지는 않습니다. 구현 이름은 구현 세부 사항을 포함해야합니다. 예 : List, LinkedList, ArrayList. 나는이 접근법이 일반적이라는 것을 알고 있지만, 그것이 좋은 것을 의미하지는 않습니다. – Vajda
더 이상 인터페이스를 사용하지 않습니다. 이것이 2012 년의 해답임을 기억하십시오. 프레임 워크와 조롱 프레임 워크는 그 이후로 발전해 왔습니다. –
이것이 사소한 세부 사항 일 수 있지만 구현 클래스에 접미사 또는 접두사가 있어야한다는 것을 알고 있습니다. SQLAllQuestions 또는 AllQuestionsSQL? 당신은 무엇을 선호합니까? – LuckyLuke
나는 개인적으로 SqlAllQuestions를 사용할 것이지만, AllQuestionsSql을 사용하지 않는 이유는 보이지 않는다. 이 이름은 응용 프로그램의 'Composition Root'부분에서만 사용되므로 많이 볼 수 없기 때문에 별 문제가되지 않습니다 (http://blog.ploeh.dk/2011/07/28/). CompositionRoot.aspx) – Dmitry
한 가지 더. 귀하의 링크를 읽었을 때 좋았지 만, AllQuestions 인터페이스가 있고 모든 질문을 나열하고 싶다면 어떻게해야합니까? AllQuestions.everything()? CRUD를 할 때 관습이나 무언가가 있습니까? – LuckyLuke