有可能简化我的架构吗?
我刚刚开始研究一个MVC项目,事情会好起来的,但它看起来像是我用很多对象创建了许多意大利面条代码。 任何人都可以看到我可以在整个项目失控之前简化这个解决方案吗?
好的,这是我的设置:
DAL - 具有实体框架连接和方法来获取数据,然后将数据转换为模型层中的模型对象
BLL - 将数据发送回UI模型 - 这包含整个站点使用的所有模型对象,通过创建新对象然后填充变量将来自DAL的任何内容转换为这些对象。
用户界面 - 我的MVC解决方案
其他解决方案也使用DAL,BLL和Model。
现在使用MVC,我试图使用验证注释([必需的]等),这意味着我必须重新创建具有注释的模型对象。 这很好,但如果我想将数据保存回数据库,我需要转换那些只是混乱的类。
任何人都可以看到我可以如何使用我的当前模型类库与MVC模型对象使用验证注释?
如果我没有清楚地解释我自己,请让我知道,我会提供更多细节。
谢谢
理想情况下,一方面需要与领域模型和MVC模型(它们实际上是ViewModel )分离。 这种分离非常重要,强烈建议。
尽管ViewModel可以包含额外的东西,但在大多数情况下,这些看起来很相似。 然后你可以使用AutoMapper从一个转换到另一个。
例如:
public class User // in entity DLL
{
[Required]
public string Name {get; set;}
}
public class UserViewModel : User // in MVC DLL
{
public string LastVisitedPage {get; set;} // which only MVC needs to know
}
Mapper.Map<User, UserViewModel>();
Mapper.Map<UserViewModel, User>();
您可以将元数据放入元数据对象中,而无需重新创建模型对象。 这是一个非常简单的方法,但它确实要求模型对象本身被标记为部分。 我希望如果不是这种解决方案不适合你,那也行。
[MetadataType(typeof(PreviousResultsMetaData))]
public partial class PreviousResults
{
public class PreviousResultsMetaData
{
[DisplayName("Class Ranking Score")]
[Required]
[Range(0.0, 100.0)]
public object ClassRankingScore { get; set; }
}
}
在上面的例子中,有一个名为PreviousResults的数据模型对象,它由别的脚手架代码在别处创建。 它定义了使用LINQ发送到数据库和从数据库发送的POCO对象。 MetadataType属性指示将用于保存元数据的类。 然后,您只需创建与您的真实数据成员名称相匹配的简单对象并对其进行注释。
我希望这有帮助。
您可以使用FluentValidation框架进行验证。 看这里
http://fluentvalidation.codeplex.com/
链接地址: http://www.djcxy.com/p/59189.html