ソリューションに設計上の欠陥があるかどうか疑問に思っています。これが私が持っているものです:
Entities
=>純粋なポコ。参照:なし。Data
=>データアクセス。参照:Entities
。Service
=>ビジネスロジック。参照:Entities
およびData
- マネージャークラス。
- ViewModels。
WebApp
=>UI。参照:Entities
およびService
WebApp
UIとしてのASP.NETMVCプロジェクト、Entities
純粋なPOCOを保持するための参照のないプロジェクト。Data
データベースにアクセスしService
、ビジネスロジック(私のマネージャークラスがある場所)にアクセスします。
基本的に、私はManager
すべてのエンティティのクラスを定義しました。たとえば、Message
エンティティのリストに関連するエンティティがありRecipient
ます。データ層を使用したCRUD操作と論理結果の両方を担当するクラスMessageManager
とクラスがあります(例)RecipientManager
public List<Message> GetAllMessagesWithPermissionForUser(User user, Permission permission)
私のMVCプロジェクトでは、サービスレイヤーでいくつかのViewModelクラスを定義して、ビューの特定のビデオモデルを生成しました。ビューモデルはManagerクラスを使用しているため、サービスクラスで定義しました。たとえばMessageOperationVM
、プロパティを持つビューモデルがありPermittedBoxesToSend
ます。このプロパティは、私のBoxManager
クラスを使用して、指定されたメッセージで許可されているすべてのボックスを取得します。
// Initialized by Catsle Windsor.
public BoxManager BoxManager {get; set;}
public List<Box> PermittedBoxesToSend
{
if(this._premittedBoxesToSend != null)
{
this._permittedBoxesToSend = BoxManager.GetPermittedBoxesToSend(this.Message);
}
}
Viewmodelsでマネージャークラスを使用することが良い設計であるかどうかはわかりません。DIを設定するためのコンストラクター/プロパティセッターとして定義しましたが。プロパティを定義する代わりに、ビューモデルのプロパティをコントローラーに入力して、ビューモデルのマネージャークラスを削除する必要がありますか?
public ActionResult ShowNewMessageDialog() { var messageVM = new MessageOperationVM() { new Message() }; messageVM = this.BoxManager.GetPermittedBoxesToSend(); }
エンティティごとにマネージャークラスを使用すると、メンテナンスが難しくなるようです。
BaseManager
(それらはすべて、共通の操作を共有 するクラスから派生していますが)- 上記のデザインで言及する価値のある再考はありますか?
ありがとうございました。
更新:
eulerfxの回答に基づく:
あなたの回答で私が抱えている問題は次のとおりです。ViewModelを構築するには、いくつかのサービスレイヤーのメソッドを呼び出す必要があります。そのため、pocoエンティティだけに基づいてViewModelを構築することはできません。これらのパーツもコントローラーで作成することをお勧めしますか?:
public ActionResult ShowNewMessageDialog()
{
var message = this.messageRepository.GetMessage();
var messageVM = new MessageViewModel(message);
messageVM.CustomProperty = this.messageManager.CallSomeMethod(message);
return View(messageVM);
}