C# ASP.NET MVC2:多态类的ViewModel
我正在制作一个MVC2应用程序来管理计费方案。这些计费方案可以是各种类型,例如每日、每周、每月等,并且所有类型都有其特定的属性。我的班级结构如下所示:C# ASP.NET MVC2:多态类的ViewModel,c#,asp.net,asp.net-mvc-2,polymorphism,viewmodel,C#,Asp.net,Asp.net Mvc 2,Polymorphism,Viewmodel,我正在制作一个MVC2应用程序来管理计费方案。这些计费方案可以是各种类型,例如每日、每周、每月等,并且所有类型都有其特定的属性。我的班级结构如下所示: public abstract class BillingScheme { /* basic billing scheme properties */ } public class BillingSchemeMonthly : BillingScheme { public string SpecificMonths; } //etc. f
public abstract class BillingScheme { /* basic billing scheme properties */ }
public class BillingSchemeMonthly : BillingScheme
{
public string SpecificMonths;
}
//etc. for other scheme types
我使用计费方案ID通过基类检索计费方案,它为我提供了一个正确类型的对象
属性SpecificMonths映射到包含的数据库varchar字段-月数的分隔字符串。我想将其拆分为一个数组,这样我就可以创建一个复选框列表,我最好使用viewmodel中的facade属性来完成这项工作。我可以在视图内部完成,但这似乎与MVC模式背道而驰
问题是我只能专门为BillingSchemeMonthly创建此viewmodel,而无法将BillingSchemeMonthly强制转换为BillingSchemeMonthly viewmodel。
我不希望在viewmodel中实现克隆方法,因为整个计费方案相当大,并且属性的数量可能会增加
提前感谢您的帮助。理想情况下,从模型转换到视图模型时,您将拥有一个单独的转换器类 在我们的MVC项目中,我们有两种类型的转换器,
IConverter
定义Convert
方法,以及ITwoWayConverter
定义ConvertTo
和ConvertFrom
方法
然后,我们将转换器注入必要的控制器,并使用它们进行所有转换
这使一切保持整洁,并允许清晰地分离关注点
当我们实现这一点时,我们将专门为我们希望执行的转换类型创建一个新类:
public class MonthlySchemeBillingToMonthlySchemeBillingViewModelConverter :
IConverter<MonthlySchemeBilling,MonthlySchemeBillingViewModel>
{
public MonthlySchemeBillingViewModel Convert(MonthlySchemeBilling)
{
// Impliment conversion
}
}
public class MonthlySchemeBillingToMonthlySchemeBillingViewModelConverter:
I转换器
{
公共月化学平衡模型转换(月化学平衡)
{
//执行转换
}
}
你可以看看。好建议!这基本上等于实现了一个克隆方法,不是吗?我希望避免手动填充所有属性。