名前があり、オブジェクトのように聞こえますが、5 つの主要な DDD ビルディング ブロックの 1 つの責任と重複するものが存在するドメイン モデル内の概念に遭遇した場合、このオブジェクトに名前を付けたり、設計を処理したりするためのベスト プラクティスは何ですか?実際の実装にその名前またはフレーズが含まれている場合と含まれていない場合がありますか?
より具体的な例を挙げると、DDD の精神でタイム トラッキング アプリケーションを設計していて、ドメインの専門家が「タイム ログ」と呼ぶものに遭遇したとしましょう。全従業員のパンチアウトタイム。
この情報を基に、既存の時間エントリを照会し、新しいまたは修正された時間ログ エントリを永続化できる TimeLog という名前のクラスが作成された場合、そのようなクラスが実際に DDD リポジトリの役割を果たしていると最初に考えました。簡単にするために、さまざまな議論とリファクタリングの後、ログエントリは本質的にそれ自体の集約ルートであり、対応するリポジトリが必要であるという結論に達したと仮定します。
ここで、ユビキタス言語の DDD の概念により近いと思われるTimeLogという名前をリポジトリに付けるか、 TimeLogEntryRepositoryと呼ぶかのオプションが残されています。これは、クエリ/永続化する集約ルートの後にリポジトリを命名するためのより一般的な規則に適合しているようです。私は TimeLog を使用するという考えに傾倒しています。これは、ドメイン モデルで TimeLog が果たす実際の役割をより説明し、ドメインの専門家に設計を伝えるのに役立つはずだからです。一方、TimeLogEntryRepository を使用するという選択は、既存の DDD 規則に従うため、開発者が設計を理解しやすくなります。妥協案として、TimeLog の命名を使用することもできますが、すべてのリポジトリに IRepository インターフェイスを実装するか、共通のリポジトリ基本クラスから継承させて、開発者がドメイン モデルを構成する他のリポジトリ クラスを見つけて区別できるようにします。
このような場合のベストプラクティスは何ですか? サービスは、開発者が SomeComplexActivityService のように「サービス」サフィックスを使用して通常名前を付ける典型的な DDD ビルディング ブロックの別の部分であるため、おそらく同じタイプの問題がサービスで発生していることがわかりますが、エンティティと値オブジェクトの場合、これは実際には問題ではありません. 私は特に、DDD の経験が豊富な他の人が何を言わなければならないかを知りたいと思っています。