使用nTier架构时,通常会创建数据,业务,工作流和ui层。在此设置中,您的数据层和业务层是分开的,可以由其他层重复使用。
在ASP.NET MVC中,模型似乎充当业务层和数据层,因为模型显然是数据,所有文档都表明业务逻辑属于模型。
当这两个层次混合时,这种架构如何促进关注点的良好分离?
答案 0 :(得分:4)
View Models和Domain Models之间存在差异。域模型是您的应用程序域。这些模型可以在任何层中的任何位置使用,它们通常放在单独的共享项目中。您的View模型仅适用于UI。它们取决于您的页面需求/结构。假设您要创建用户管理页面,那么您的视图模型可能是包含2个属性register_shutdown_function
和User
的类,其中List<Role>
和User
是域模型。
最后,您的数据模型通常只是数据库传输对象。实体框架模型通常同时用作数据和域模型。
所以,回答你的问题:你自己选择舒适的混合模型。问题是如果你不想混合,那么你将在整个解决方案中有相当多的模型重复,你将不得不手动或借助{{{}等库来实现从一种模型到另一种模型的映射。 {1}}。这就是开发人员选择妥协的原因。
答案 1 :(得分:1)
模型 - 视图 - 控制器(MVC)是用于实现用户界面的软件架构模式。它将给定的软件应用程序划分为三个相互连接的部分,以便将信息的内部表示与信息呈现给用户或从用户接受的方式分开。 (Wikipedia)
我们应该考虑到,当我们谈论ASP.NET MVC时,我们谈论的是“用户界面”,因此,它是一个用户界面框架而不是应用程序框架。在MVC中,关注点分为三个部分:模型,视图和控制器。
在多层或多层体系结构中,关注点主要在表示,应用程序,业务和数据访问层中分离,这是一个应用程序框架体系结构,ASP.NET MVC属于表示层。
总而言之,如果我们区分应用程序和表示框架,就完全可以实现关注点的分离。
答案 2 :(得分:0)
Andrei M是现货。我同意View模型和域模型之间的区别。将MVC中的M视为您的视图的模型可能会有所帮助,而这些“视图模型”不应该知道它们从何处获取数据。其中存在着关注点的分离。控制器将代理域模型和视图模型之间所需的交换,以使用数据填充视图模型。控制器代理的这些数据交换通常通过使用另一层(例如存储库,基础结构或服务层)来实现......但不一定如此。在单项目解决方案中,“Models”文件夹可能包含域模型,然后您可能有一个名为“ViewModels”的单独文件夹。控制器将通过“模型”获取数据,然后使用从模型“接收”的数据填充视图模型。视图模型将是强类型视图的基础模型。有人可能想知道,如果域对象和视图之间存在简单的一对一映射,开发人员甚至可能会使用视图模型。一个例子是您可能需要“展平”域对象及其关系。另一个例子可能是对于索引或列表页面,您可能需要包含搜索过滤器;视图模型极大地简化了对需求的更改。