Model 模型/实体和N层应用程序的集成

Model 模型/实体和N层应用程序的集成,model,n-tier-architecture,Model,N Tier Architecture,一个月前,我才发现从n层应用程序的数据访问层直接访问实体/模型是多么愚蠢。在学习ASP.NET MVC时阅读了有关ViewModels的内容后,我逐渐了解到,要制作一个真正可扩展的应用程序,UI层与之交互的模型必须与数据访问层可以访问的模型不同 但是业务层呢?我的业务层也应该有一套不同的模型吗?为了实现真正的关注点分离,我是否应该拥有一组只与我的业务层相关的特定模型,这样就不会干扰DAL中的任何实体(可能是由实体框架或EJB生成的),或者这样做会有点过分呢 是的,你可以。然而,这种特殊的解决方案

一个月前,我才发现从n层应用程序的数据访问层直接访问实体/模型是多么愚蠢。在学习ASP.NET MVC时阅读了有关ViewModels的内容后,我逐渐了解到,要制作一个真正可扩展的应用程序,UI层与之交互的模型必须与数据访问层可以访问的模型不同


但是业务层呢?我的业务层也应该有一套不同的模型吗?为了实现真正的关注点分离,我是否应该拥有一组只与我的业务层相关的特定模型,这样就不会干扰DAL中的任何实体(可能是由实体框架或EJB生成的),或者这样做会有点过分呢

是的,你可以。然而,这种特殊的解决方案使代码复杂化,并导致大量具有相似属性和数据的POCO,这是毫无意义的


然而,主要的一点是,它只是将用于渲染视图的对象与用于表示数据的对象分开

ASP.NET MVC通过模型-视图-视图-模型(MVVM)的工作方式得到了很好的服务。这意味着每个视图只会获得一个ViewModel,这是一个专用于服务于该视图的自定义形状模型

例如,如果您的Orders视图需要一些OrderDetail和Customer数据,请创建一个ViewModel,该ViewModel仅公开该视图所需的那些实体中的数据。ViewModel用于将来自多个(或一个,视需要而定)实体的数据聚合在一起


您的实体和业务逻辑“位于”视图/视图模型层之下,应该不知道其实现。

这是否意味着我应该让我的业务逻辑依赖于DAL的实现(在本例中是实体框架)?您的业务层应该依赖于实体,是的。在EntityFramework4中,这些可以是POCO(普通的旧CLR对象)。还没有费心看EF4。我可以看一看。复杂性正是我所害怕的。因此,重要的是将视图分离,业务逻辑可以依赖于DAL提供的任何实现?