私は DDD を使用するプロジェクトに取り組んでいます。いくつかのクラスがあり、それらをどこに置くべきかわかりません。
ドメインは既存のゲームに関するものです。このゲームには、キャラクター、スキルツリーなどの基本的な概念があります。私のドメイン クラスは、これらの概念を単純に表したものです。私はこのゲームを作りませんでした。
私のアプリケーション/プロジェクトは、これらの概念を表現するソフトウェアに付加価値を加えることです。現時点では、名前と説明のみが可能な追加値です (たとえば、「火の魔道士」と「マナ依存、注意してください!」)。
質問 1 : 2 つのクラスを持つことは理にかなっていますか、それともそれらをマージする必要がありますか? 前者の場合、この「付加価値(名前と説明)付き」のクラスはどこに置けばいいのでしょうか?アプリケーション層で?
質問 2 : ドメイン レイヤーは、私が取り組んでいる知識の領域を表し、アプリケーション レイヤーは、ドメインには存在しないが付加価値として提供したいすべてのものを表します。
(したがって、ソフトウェアが単にドメインを表す場合、アプリケーション層は薄く、ソフトウェアがドメイン以外の機能を多数提供する場合、アプリケーション層は厚くなりますか?)
追加情報 1:私のプロジェクトは、キャラクター シミュレーターの作成に関するものです。したがって、キャラクターをシミュレートするには、キャラクターとそのすべての依存関係を表現する必要があります。私のドメイン層の責任は、ゲームを表現することです。これには、いくつかのプロパティ (Life、Mana、Attack、Defence、Class) を持つ Character などのクラスと、いくつかの列挙型 (使用可能なすべてのクラスをリストする CharacterClass など) が含まれています。
ここで、自分のプロジェクトで、ゲームのキャラクターを表すプロジェクトを作成する機能をユーザーに提供したいと考えています。プロジェクトでは、ユーザーは、現在のプロジェクトの名前、メイン (およびセカンダリ) 機器セット、メイン (およびセカンダリ) スキルツリーなどの追加情報を保存することもできます。装備セットやスキルツリーの注釈も利用できるので、ユーザーは簡単に組み込みのメモ/ポストイットを持つことができます。セカンダリ装備セットとスキル ツリー、注釈はゲーム内に存在しない概念です (したがって、私のドメインには存在しません)。
質問1の「付加価値のあるクラス」とは、複数の情報(キャラクター装備、スキルツリー、アノテーションなど)の集合体であるキャラクタープロジェクトです。ユーザーが必要に応じて、物理サポートに保存し、後で開いて編集することができます。
質問 1 の再定式化: Character クラスと CharacterProject クラスがあります。CharacterProject クラスは、複数の情報の合成です。しかし、それは私のアプリケーションに固有のものです。アプリケーション層、ドメイン層、または他の場所に配置することは理にかなっていますか?