【发布时间】:2015-09-24 22:14:41
【问题描述】:
我有一个解决方案分为两个项目:一个包含我所有模型类的类库(我们称之为 Business)和一个 ASP.Net MVC 项目。
我的 Business 类是通用的,适用于多种类型的项目。因此,它们不包含与其他类的任何数据注释/关联,仅包含成员变量/属性/构造函数。
使用代码优先方法,我应该如何设计我的 ASP.Net 模型以与我的 Business 模型一起使用。
我最初的教导是将我的 Business 类设置为部分类,然后通过添加必要的数据注释/关联来覆盖我的属性。我不能这样做,因为我们正在处理两个独立的项目。
我也在想我可以使用继承。我的 ASP.Net 模型可以从业务类继承,并且我可以在其上添加我的数据注释/关联。不过,这似乎有点混乱和不合逻辑,因为我需要在这个新的子类中定义我的所有构造函数。
有干净利落的聪明方法吗?
编辑:
我的 Business 类通过在属性设置器中抛出异常来进行验证。我的第一个设计是创建我自己的自定义数据注释,它将捕获我的设置器抛出的异常:
public class SetterBasedValidation : ValidationAttribute
{
string m_errorMessage = null;
public SetterBasedValidation(string errorMessage)
{
m_errorMessage = errorMessage;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
try
{
Type type = validationContext.ObjectType;
PropertyInfo property = type.GetProperty(validationContext.MemberName);
property.SetValue(validationContext.ObjectInstance, value);
}
catch (Exception)
{
return new ValidationResult(m_errorMessage);
}
return ValidationResult.Success;
}
}
然后我需要一种方法来在我的 ASP.Net 模型类中使用我的自定义数据注释。这会给我想要的结果:
- 保持我的商务课程通用
- 使用我的设置器的验证
- 使用数据注释
【问题讨论】:
-
在大多数业务领域中,您将使用数据注释指定的内容和关联将适用于为该业务编写的任何应用程序。我有点惊讶您看到重用潜力并想知道您是否过度思考它。您的 UI 项目中的模型对象通常应该不同于您的业务对象。
-
@EricJ。在这种情况下,您将如何处理?直接在我的业务类中使用数据注释并完全绕过 ASP.Net 模型?
标签: c# asp.net asp.net-mvc ef-code-first