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){...}
}
それは小さな変更のように見えるが、それは多くのことができます...
記事全文は読んで、ブックマークする価値があります。
これは細かいことかもしれませんが、実装クラスに接尾辞または接頭辞を付けるべきですか? SQLAllQuestionsまたはAllQuestionsSQL?あなたは何を好むか? – LuckyLuke
私は個人的にはSqlAllQuestionsを使用しますが、AllQuestionsSqlを使用しない理由はありません。あなたが言っているように、この名前はアプリケーションの「Composition Root」部分でのみ使用され、多くは見られないので、それは重要ではありません(http://blog.ploeh.dk/2011/07/28/ CompositionRoot.aspx) – Dmitry
さらにもう1つ。私はあなたのリンクを読んだが、それは素晴らしかったが、あなたはAllQuestionsインターフェイスを持っていて、あなたはすべての質問をリストしたいと思っていますか? AllQuestions.everything()? CRUDをするときに何らかの規則や何かがありますか? – LuckyLuke