Asp.net mvc 胖型/瘦型控制器与服务层
多年来,我一直在使用.Net开发企业应用程序 我的应用程序通常有一个域模型,其中包含映射到SQL DB表的实体。 我使用存储库模式、依赖项注入和服务层 最近,我们开始了MVC3项目的工作,我们有一个争论,应该把哪个逻辑放在哪里。 我采用了瘦控制器/胖模型体系结构,想知道服务层将如何适应 选项1-与服务的模型对话 控制器是精简的,在模型上调用方法。这些模型“知道”如何从数据库中加载自己并与存储库或服务通信。 例如,customerModel有一个Load(id)方法并加载customer和一些子对象,如GetContracts() 选项2-控制器与服务对话 控制器要求服务检索模型对象。加载/存储等逻辑在服务层。该模型是一个纯实体模型,仅包含数据 为什么选项1会是一个更好的选择,特别是当我们谈论企业应用程序时,我的经验告诉我要分离关注点,尽可能精简模型和控制器,并让专门的服务来处理业务逻辑(imcl.DB交互) 感谢所有关于优秀资源的建议和参考。选项1: 您可以认为model==服务。 模型也是业务层 选项2是贫血域模型反模式。Asp.net mvc 胖型/瘦型控制器与服务层,asp.net-mvc,asp.net-mvc-3,model-view-controller,architecture,service-layer,Asp.net Mvc,Asp.net Mvc 3,Model View Controller,Architecture,Service Layer,多年来,我一直在使用.Net开发企业应用程序 我的应用程序通常有一个域模型,其中包含映射到SQL DB表的实体。 我使用存储库模式、依赖项注入和服务层 最近,我们开始了MVC3项目的工作,我们有一个争论,应该把哪个逻辑放在哪里。 我采用了瘦控制器/胖模型体系结构,想知道服务层将如何适应 选项1-与服务的模型对话 控制器是精简的,在模型上调用方法。这些模型“知道”如何从数据库中加载自己并与存储库或服务通信。 例如,customerModel有一个Load(id)方法并加载customer和一些子对
所有这些都取决于应用程序的意图和要求 也就是说,我建议使用“中等规模”(不是本地餐馆,也不是Twitter/Facebook)的web应用程序
在我的个人实践中,我在数据层上对服务进行编码,我认为我对POCO对象的行为建模(持久性机制、低级验证等)以及更高级的服务(业务/工作流功能)更接近MVC机制。
编辑1: 请记住,这并不意味着您的实体/域模型是或必须是贫血的。欢迎使用ORMs、存储库和工厂、验证或状态机制。它只意味着对于中等规模的应用程序,MVC中的模型表示用于控制器的模型,以便将其交给您的视图 希望这一点能让相信贫血数据模型是反模式的福勒使徒们平静下来。同时,它确实反映了比OOP稍微多一些的过程角度,在OOP中,在建模类中包含行为更纯粹 没有“终极真理”,但使用这种模式,您会发现构建、测试和部署应用程序很容易,同时保持了大量的可重用性和可伸缩性
编辑2: 这就是说,即使是规模适中的应用程序,过度架构(由一个词nerds组成?)系统也太常见了。例如,使用存储库模式包装ORM,然后编写服务来使用存储库。。。所有这些都有助于分离关注点等,但如果您的项目不需要(而且不太可能很快需要)这些东西,请不要构建它。跳过存储库,针对ORM编写精简业务服务(例如查询类),甚至让控制器直接与ORM对话,都没有什么错。这完全取决于规模
编辑3:
我想指出的是,这个解释和建议是针对服务器端MVC架构(如ASP.Net)的上下文,而不是针对clent端框架(如Knockout或Backbone)。在我们继续讨论将所有内容放在何处之前,您需要更多地了解MVC。好吧,如果你想遵循这个模式。否则你现在可以停止阅读了 模式的定义非常松散。没有任何内容说明控制器、视图或模型应该是什么样子,或者它们应该如何构造。该模式简单地说明您应该分离各个部分以及它们应该如何相互作用。所以,让我们进一步了解它们是什么(我的解释) MVC 型号 模型可以是任何东西。它可以是一个Web服务