私はほとんどCRUDアプリであるasp.net-mvcサイトを持っていますが、webviewの外でいくつかの追加と更新も行っています(スプレッドシートからのアップロードなど)。 この記事に基づいて、MVC プロジェクトの外部のロジックを別の共有プロジェクトにできるだけ多く取得しようとしています。これにより、すべてのシナリオで同じコードを再利用でき、バインドされている「読み取り」ビューモデルを分離して分離しようとしています。フォーム投稿でサーバーに投稿されているものを表す「編集」ビューモデルから表示するための UI。
他のソリューションと共有されているソリューション (domainobjects、importexport など) に多数のプロジェクトがあり、MVC プロジェクトには MVC プロジェクトに次のディレクトリがあります。
- コントローラー
- ビュー
- ビューモデル
- スクリプト
- EditViewModels
ViewModels フォルダーは、ビューにバインドしているオブジェクトを表します (通常、以下を含むコンテナー オブジェクト)。
- ドメイン オブジェクトと
- UI ドロップダウンなどを設定するための SelectListItem の IEnumerable の束
このようなもの:
public class OrderViewModel
{
public Order MyOrder {get;set;}
public IEnumerable<SelectListItem> OrderTypes {get;set;}
public IEnumerable<SelectListItem> Sizes {get;set;}
}
私の EditViewModels フォルダーは、フォームからサーバーに投稿しているオブジェクトを表しているため、通常は、次のようにデータベースを追加または更新する前に、ドメイン オブジェクトに入力するプリミティブのみを含む単純なフラット オブジェクトです。
public class OrderEditViewModel
{
public int Id {get;set;}
public int OrderTypeId {get;set;}
public int SizeId {get;set;}
}
私の主な質問は、通常は次のように見えるコントローラークラスにメソッドがある場合です(簡略化):
public ActionResult Update(OrderEditViewModel order)
{
var existingOrder = _repository.GetOrder(order.Id);
existingOrder.Name = order.Name;
existingOrder.Size = _repository.GetSize(order.SizeId);
existingOrder.Price = order.Price;
_repository.Save(existingOrder);
return Json( Result = "Success");
}
MVC プロジェクトの外部でできるだけ多くのコードを取得する方法を見つけようとしていますが、MVC プロジェクトの外部の EditViewModel 内のすべてのクラスを移動して、それらのオブジェクトを再利用できるようにする必要があります。
これらの「Post」データ構造を MVC プロジェクトの外部でクラス化することに何か問題があると思いますか。「ビューモデル」クラスを考えると、それをビューから遠ざけるのは間違っているように感じますが、MVC プロジェクトの外でこのコードを共有する方法は他にありません。ここの「viewModel」の名前が間違っているのではないでしょうか?