2017-06-05 15 views
0

私はApiプロジェクト、ビジネスプロジェクト、データベースコンテキストを持っています。WebApiプロジェクトのViewModelsまたはRequestModels、オートマッペでのマッピングの追加レイヤー

私はこのようなデザインを考えています:

  • APIプロジェクトでのviewmodels、およびautomapperとのマッピング。 Automapper ここでは、ビジネスプロジェクトのviewmodelを
  • のdtoモデルにマッピングし、automapperを使ってマッピングします。 Automapperはモデルをエンティティモデル(データベース)にマップします。

質問1:私はOperationViewModelまたはOperationRequestModel(ResponseModel)をapiプロジェクトで使用する必要がありますか?

質問2:viewmodelとdtoモデルのオーバーキルをさらにマッピングしているのですか、それらの問題を分けて切り離すのが良いか、エンティティモデルを使ってモデルにマップし、apiプロジェクトのdtoモデルを使うべきですか?

答えて

1

まず、「お持ち帰り」をお祝いします。多くのプロジェクトでは、UIレイヤーにデータベースアクセス権があります。

最初は、ViewModelクラス、ビジネスクラス、データクラスに異なるクラス(ただしほとんど同じクラス)を使用すると苦労するかもしれませんが、これはAutoMapperが優れている点です。ほとんどの場合、何もする必要はなく、ただ機能します。

コードが骨で少し肉を取得すると、ビューモデルに与える影響を気にすることなくデータベースフィールドを追加しやすくなり、ビューに必要なビューモデルを作成することが容易になります。データベースのフィールドについて心配する必要はありません。 Win-win。私は、たとえそれらが同一であっても(必要に応じて継承を使用しますが、毎回違うクラスがあることを確かめてください)、それぞれの関数に対して別々のビューモデルを作成します。

IMO、モデルが作成され、それらを消費層で公開されなければならないので、ViewModelにはXXXViewModel、にbusinesss層がXXXDtoなどを持っている必要があります

public IndexViewModel Index() 
{ 
    var vm = new IndexViewModel() 
    { 
     Items = _mapper.map<List<Item>>(_service.GetSomeData()) 
    }; 
    return vm; 
} 
public GetViewModel Get(int id) 
{ 
    var vm = _mapper.Map<GetViewModel>(_service.get(id)); 
    return vm; 
} 
+0

偉大なおかげで、同様のフィールド(のための場合のviewmodelを再作成追加と更新の例)は良いか悪いかジレンマです。たとえば、いくつかのフィールドを作成時に自動的に(クライアント経由ではなく)保存してから、更新するときにクライアント経由でフィールドを更新する必要があります。だから私は継承よりも重複(ビューモールドの分離)を望むと思うが、個人的な意見だと思う - https://stackoverflow.com/questions/6954102/asp-net-mvc-architecture-viewmodel-by - 構成継承または複製 –

関連する問題