2011-01-07 11 views
0

私は請求の仕組みを管理するMVC2アプリを作っています。これらの料金請求スキームは、様々な種類のものでよい。毎日、毎週、毎月など、すべてのタイプは固有のプロパティを持っています。私のクラスの構造は次のようになります。ASP.NET MVC2:ポリモーフィッククラスのViewModel

public abstract class BillingScheme { /* basic billing scheme properties */ } 
public class BillingSchemeMonthly : BillingScheme 
{ 
    public string SpecificMonths; 
} 
//etc. for other scheme types 

私は課金スキームのIDを使用して基本クラスを介して課金スキームを取得し、それは私に正しい型のオブジェクトを提供します。

プロパティSpecificMonthsは、月の数字の分離文字列を含むデータベースのvarcharフィールドにマップします。これを配列に分割して、チェックボックスのリストを作成することができます。これをビューモデルのファサードプロパティで行うのが望ましいでしょう。私はビューの中でそれを行うことができますが、それはMVCのパターンに反するようです。

問題は、BillingSchemeMonthly専用のこのビューモデルを作成でき、BillingSchemeMonthlyをBillingSchemeMonthlyViewModelにキャストできないことです。 私は、請求の仕組み全体がかなり大きく、プロパティの数が増えるため、ビューモデルでクローンメソッドを実装したくないと思います。

ご協力いただきありがとうございます。

答えて

0

ModelsからViewModelsに変換するときは、コンバータクラスを別にするのが理想的です。私たちはConvertToConvertFrom方法を規定している2つのコンバータの種類、IConverter<TFrom,TTo>Convertメソッドを定義し、ITwoWayConverter<TFrom,TTo>を持っている私たちのMVCプロジェクトで

次に、私たちのコンバータを必要なコントローラに挿入し、それを使用してすべての変換を行います。

これはすべてをきれいに整え、問題の明確な分離を可能にします。

我々はこれをimpliment

は、我々は我々が行うために探しているコンバージョンのタイプのために特別に新しいクラスを作成したい:

public class MonthlySchemeBillingToMonthlySchemeBillingViewModelConverter :  
        IConverter<MonthlySchemeBilling,MonthlySchemeBillingViewModel> 
     { 
     public MonthlySchemeBillingViewModel Convert(MonthlySchemeBilling) 
     { 
      // Impliment conversion 
     } 
     } 
+0

これは基本的にはCloneメソッドの実装と同じですか?私はすべてのプロパティを手動で埋め込むことを避けることを望んでいました。 – Inertiaboogie

1

あなたはAutoMapperを見てみましょうことがあります。

+0

良い提案!これを調べます。 – Inertiaboogie

関連する問題