ソリューションに設計上の欠陥があるかどうか疑問に思っています。これが私が持っているものです:
Entities=>純粋なポコ。参照:なし。Data=>データアクセス。参照:Entities。Service=>ビジネスロジック。参照:EntitiesおよびData- マネージャークラス。
- ViewModels。
WebApp=>UI。参照:EntitiesおよびService
WebAppUIとしてのASP.NETMVCプロジェクト、Entities純粋なPOCOを保持するための参照のないプロジェクト。DataデータベースにアクセスしService、ビジネスロジック(私のマネージャークラスがある場所)にアクセスします。
基本的に、私はManagerすべてのエンティティのクラスを定義しました。たとえば、Messageエンティティのリストに関連するエンティティがありRecipientます。データ層を使用したCRUD操作と論理結果の両方を担当するクラスMessageManagerとクラスがあります(例)RecipientManagerpublic 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);
}