ビジネス ロジック層には、ビジネス ロジックを含むビジネス オブジェクトが含まれます。それらのいくつかは永続的であり、それらはエンティティです。エンティティとそのロジックがモデルを構成します。それらの一部はステートレスであり、エンティティの責任に適合しない追加のロジックが含まれています。これらのオブジェクトはサービスです (モデルの一部でもありますか?)。
次に、マネージャー、ファクトリー、ビルダーなどのヘルパー/ユーティリティ クラスがいくつかあります。今のところ、この分解は正しいですか?
次に、エンティティまたはサービスではなく、状態を含むことができるオブジェクトがあります。独自のスレッドを持つアクティブなオブジェクト。長生きできる。それらのオブジェクトは何ですか? ビジネスオブジェクトだけですか、それともビジネスコンポーネントですか?
私のプロジェクトには Device クラスがあります。DBに格納されるので、最初はEntityオブジェクトのように扱いました。実際のデバイスから定期的にデータを取得し、そのデータで複雑なロジックを実行する独自のスレッドが含まれています。したがって、それはアクティブで長寿命のオブジェクトです。重い/複雑でアクティブで長寿命のオブジェクトであるため、エンティティになれないことに気付きました(または???)。だから私はそれを別々のクラスに分割しました:
- 現在エンティティである DeviceDescriptor と
- 複雑なビジネス ロジックを含む DeviceAccess (または Device ) は、存続期間が長く、アクティブです。また、DeviceDescriptor オブジェクトに基づいて初期化されます。
この DeviceAccess オブジェクトはどのような種類のビジネス オブジェクトですか?
このような構造のプロジェクトがある場合、Device/DeviceAccess オブジェクトは名前空間階層のどこに配置する必要がありますか?
- ProjectName.Core – コア オブジェクト、ビジネス オブジェクト
- ProjectName.Core.Entities – 持続性ビジネス オブジェクト
- ProjectName.Core.Services – サービス インターフェイス
- ProjectName.Core.Services.Default – サービスの実際の実装
- ProjectName.Core.Repositories – (DAL レイヤー) リポジトリ インターフェイス
- ProjectName.Core.Repositories.SqlServer – リポジトリの実際の実装
まず、このオブジェクトを Core 名前空間に配置する必要があると考えました。しかし、別のコンポーネント/モジュールまたは機能のように扱い、 Core 名前空間の外に ProjectName.Devices (他のヘルパー オブジェクト、リポジトリ、およびエンティティ - DeviceDescriptor と共に) を配置する方がよいのではないかと考えました。どう思いますか?
名前空間の構成が正しいかどうかも教えてください。DDDによるガイドではありませんでした。これは、DDD からいくつかの概念を借用した 3 層アーキテクチャです。(リポジトリ、集約ルート、サービス、モデル)。
アドバイスをいただければ幸いです。