2012-02-22 16 views
6

リポジトリおよびサービスインターフェイスとそれらの実装クラスにはどのように名前を付けますか?リポジトリとサービスインターフェイスに名前を付けるには?

たとえば、名前がQuestionのモデルがあります。リポジトリ(インターフェイスと実装)とサービス(インターフェイス/実装)の名前は何ですか?これらの記事を読んだ後

Java Interfaces/Implementation naming conventionInterface naming in Java私はすでに、私は個人的にFooService、​​、FooRepositoryFooRepositoryImplを使用:)

答えて

7

DDDで名前を付ける方法は、大体2つあります。

1)ステレオタイプに基づいています。これは、名前にクラスのステレオタイプを含めるところです。例:

QuestionsRepository, TaxCalculatingService etc 

2)ドメインベース。この方法では、ドメイン言語のみを使用し、クラス名のステレオタイプは省略します。たとえば:

Questions (or AllQuestions), TaxCalculator etc. 

実装クラスはSqlQuestionsまたはInMemoryQuestionsのような名前が付けられます。

私は両方を試しましたが、私はDDDの考え方に一層合致しているように、2番目のオプションを好むようになりました。より読みやすく、より良い信号対雑音比を持っているようです。

オブジェクトのリストとしてリポジトリの概念を理解することはそれほど難しくはありませんが、それらのクラスがあるメソッドで終わるすることは非常に一般的である:フィル・Calçadoによってリポジトリ上のgreat articleからの引用は次のとおりリストにはまったく関係ありません。

ユビキタス言語とそれに関連するパターンの採用で多くのチームを指導した後、私は、リポジトリがDAOのようなクラスではないことを人々に覚えさせる最良の方法は、名前の付け方から始まることを発見しました。

年前ロドリゴ・ヨシマは、リポジトリに名前を付ける際の彼のコンベンションについて教えてくれました。代わりに、より一般的な命名スタイルの下に表示される:

class OrderRepository { 
    List<Order> getOrdersFor(Account a){...} 
} 

は、彼がこれを促進:

class AllOrders { 
    List<Order> belongingTo(Account a){...} 
} 

それは小さな変更のように見えるが、それは多くのことができます...

記事全文は読んで、ブックマークする価値があります。

+0

これは細かいことかもしれませんが、実装クラスに接尾辞または接頭辞を付けるべきですか? SQLAllQuestionsまたはAllQuestionsSQL?あなたは何を好むか? – LuckyLuke

+0

私は個人的にはSqlAllQuestionsを使用しますが、AllQuestionsSqlを使用しない理由はありません。あなたが言っているように、この名前はアプリケーションの「Composition Root」部分でのみ使用され、多くは見られないので、それは重要ではありません(http://blog.ploeh.dk/2011/07/28/ CompositionRoot.aspx) – Dmitry

+0

さらにもう1つ。私はあなたのリンクを読んだが、それは素晴らしかったが、あなたはAllQuestionsインターフェイスを持っていて、あなたはすべての質問をリストしたいと思っていますか? AllQuestions.everything()? CRUDをするときに何らかの規則や何かがありますか? – LuckyLuke

2

を行っていたものを再検討。

あなたはImplサフィックスがノイズであると主張するかもしれないが、

  • 一般的に一つだけの実装がありますので、具体的なFooXxxImplタイプはユニットテストを除き、コードでどこにも使用されていない無FirstFooServiceSecondFooService
  • ありません:依存関係が注入されていて、そのタイプがインタフェースである
+0

私は 'FooRepository'の代わりに' FooRepository'を使用します: – Paul

+0

あなたは1つの実装しかないので、FooServiceインターフェースは必要ありません。インタフェースの目的は、より多くの実装を有する可能性が高いオブジェクト/コンポーネントをモデル化することである。 validationRule、いくつかの戦略パターンなど。私は個人的には、インターフェイスの過度使用がたくさんあると思います。また、あなたの実装としてImpl sufixを使用しているということは、実装が何となく具体的​​ではないことを私に伝えます。実装名に実装の詳細を含める必要があります。たとえば、List、LinkedList、ArrayListなどです。私はこのアプローチが一般的だと知っていますが、それは良いことを意味しません。 – Vajda

+0

私はもうインターフェイスを使用しません。これは2012年の答えであることを覚えておいてください。それ以来、フレームワークとモッキングフレームワークは進化しました。 –

関連する問題