3

質問はMVCに関するものではなく、コードアーキテクチャに関するものです。UserControlのModelを入力する正しい方法は何ですか?

私はCompanyModel

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CompanyModel>" %> 

<%: Html.TextAreaFor(m => m.Name) %> 
<%: Html.TextAreaFor(m => m.Location) %> 

CompanyModel

public class CompanyModel 
{ 
    [LocalizedDisplayName("Name", NameResourceType = typeof(Resources.Views.CompanyBackground))] 
    public string Name{get;set;} 
    [LocalizedDisplayName("Location", NameResourceType = typeof(Resources.Views.CompanyBackground))] 
    public string Location{get;set;} 

    public CompanyModel() 
    { 
      var info = Project.GetCompanyInfo(); 
    } 
} 

Project.GetCompanyInfo()をとる部分図は、DALの層であり、Entity Frameworkの

私の質問を使用してDBからデータを取得してい:どのような "いい"正確な方法を入力してくださいCompanyModel?:

ソリューション1

CompanyBag

public class CompanyBag 
{ 
    public string Name{get;set;} 
    public string Location{get;set;} 
} 

Project.GetCompanyInfo()CompanyBagを返し、CompanyModelの.ctorに私がモデルを埋めるだろうを作成します。

ソリューション2

Project.GetCompanyInfo()CompanyModelを返します(したがって、何のヘルパークラスは必要ありません)、私はCompanyModel

ソリューション3

の.ctorにModelを記入します多分あなたの解決策?

更新: 私はロードアクションでLoadControllerを持っています。このアクションは、工場のようなものです。それはビューのリストを取得し、反射によってそれらを作成し、Html.RenderPartial(viewName, viewModel)によってページにロードします。したがって、CompanyModelはビューの一例に過ぎず、したがって私はそれぞれのビューを独立させる必要があります。

私の質問です:GetCompanyInfoはCompanyBagまたはCompanyModelを返し、モデルを.ctorで埋めますか?

はありがとう

答えて

2

[OK]を、質問の更新に続いて、ここにある私の更新の答え:)私は別のビューを想定してい

LoadControllerを移入がViewModelの異なる種類を取り、各ViewModelが異なるから移入されましたドメインモデルの一部。ここで私はそれに取り組むだろう方法は次のとおりです。

まず、ViewUserControl<TViewModel>の強く型付けされたサブクラスとして各部分ビューを作成し、そのLoadControllerは、作成するように指示されたビューごとに必要とするViewModelタイプを把握することができます。

第2に、IViewModelFactory<TViewModel>インターフェイスを定義し、必要なタイプのそれぞれのViewModelタイプに対して1つの実装を作成します。各実装はドメインモデルからそのタイプのViewModelを作成して設定する方法を知っています。

最後にLoadControllerは、作成するように要求された各ビューに必要なタイプViewModelを特定し、それを作成するために適切なIViewModelFactoryを使用します。

不必要なオーバーヘッドを避けるには、LoadControllerfind all the available IViewModelFactory implementations at runtimeとなり、作成するViewModelのタイプに対してスタティックストアを保持します。

だから、まとめるために:私はCompanyViewModelFactoryを使用してCompanyからCompanyViewModelを移入だろう、私はなど、UserViewModelFactoryを使用してUserからUserViewModelを埋めるだろう:)

+0

私はここではカップルの日ではなかった。私はあなたを誤解して申し訳ありませんが、私は自分の投稿を更新しました。あなたが見ていただければ嬉しいです。 – theateist

+0

私は今、私の答えを書き直しました - 基本的な要点は同じです:) –

0

あなたのViewModelを提供するために強化されたクエリオブジェクトを使用しないのはなぜFull Entityグラフを最初に取得する必要はありません。

http://www.yellowfeather.co.uk/2011/03/enhanced-query-objects-with-sharp-architecture/

私はクリスがNHibernateのためにこれを書いて実現するが、それは、あなたと、あなたが何ができるかのアイデアを与えるのに十分以上にする必要があります。

これ以外にも、私はスティーブがすでに言っていること以上に何も提供できません。慎重に彼の#2を注意してください。十分にストレスを感じることはできませんでした。

関連する問題