UI と BusinessLayer の 2 つのレイヤーを持つ従来の asp.net Web アプリケーションがあります。UI プロジェクトは ASP.NET Web サイト タイプであり、BL はクラス ライブラリ タイプです。BL プロジェクトには、Customer、User、Empoloyee などのアプリのエンティティ用のクラスがあります。各クラスには、データベースから読み取るためのメソッドと、DataReader からオブジェクト プロパティを入力するためのメソッドがあります。つまり、Customer クラスには Customer オブジェクトと Data Access Methods が一緒に含まれています。 .
ここで、MVC もサポートするように Web アプリを変更しました。古いサイト (Web フォーム) は以前と同じように機能し、私が作成しているサイトへの新しいアップグレード (サイトを管理するための管理機能の追加) は ASP.NET MVC3 にあります。ルーティングとすべてが正常に機能します。しかし、プロジェクトの構造/保守性が心配です。
新しい MVC 部分では、CustomerViewModel、EmployeeViewModel などのいくつかのエンティティに対して ViewModel を作成する必要がありました。CustomerService
" "という別のクラスを作成GetCustomerViewModel
し、そのメソッド内で既存の BusinessLayer から を呼び出し、GetCustomerMethod
(既存の BL プロジェクトで言及されているエンティティ タイプの) オブジェクトからプロパティ値を読み取り、それを に割り当てCustomerViewModel
ます (いくつか調べます)。 AutoMapper はこの後で) オブジェクトをサンプルし、このメソッドからそれを返します。My View は、このオブジェクトを使用して UI にデータを表示します。" " クラスを作成した理由CustomerService
は、CustomerViewModel オブジェクトに値を設定する前に、if 条件チェックまたはビジネス検証を行う必要がある場合があるためです。コントローラーが薄くなるように、それを「中間層/サービス層」と見なします。
私のカスタマーコントローラーから
public ActionResult Details(int id)
{
MyProject.MVCViewModel.CustomerViewModel objCustomerVM;
objCustomerVM=MyProject.MVCMiddleLayer.CustomerService.GetCustomerViewModel(id);
return View(objCustomerVM);
}
私のCustomerViewModelで
public static CustomerViewModel GetCustomerViewModel(int customerId)
{
//Create an object of new ViewModel
CustomerViewModel objCustomerViewModel = new CustomerViewModel ();
//Get an object from Existing BL of Customer of type ExistingBL.Customer
ExistingBL.Customer objCustOld=new Customer(customerId);
//Check some properties of the customer object and set values to the new ViewModel object
if(objCustOld.Type=="normal")
{
objCustomerViewModel.Priority=2;
}
else if(objCustOld.Type=="abnormal")
{
objCustomerViewModel.Priority=1;
objCustomerViewModel.Message ="We love you";
}
//Some other checking like this....
return objCustomerViewModel;
}
これは間違ったアプローチですか?私のコードは乱雑になりますか? ViewModel は既存の BL エンティティから (ほぼ) 重複したコードであるため、満足していません。このシナリオに対処する最善の方法は何ですか。この場合、リポジトリ パターン (ほとんどの例で見た) の使用について確信が持てませんか? 私はそれを行う必要がありますか?それは私のコードをどのように改善しますか?