Bri*_*ord 25 asp.net design-patterns service-layer asp.net-mvc-2
为了理解MVC 2并试图让我的公司将其作为未来发展的可行平台,我最近一直在做很多阅读.在过去的几年里,我一直专注于ASP.NET,我有一些赶上来做.
目前,我了解存储库模式,模型,控制器,数据注释等.但是有一件事让我无法完全理解,无法开始参考应用程序的工作.
第一个是服务层模式.我在Stack Overflow上阅读了很多博客文章和问题,但我仍然不完全理解这种模式的目的.我在MVCCentral上观看了高尔夫跟踪应用程序中的整个视频系列,并查看了他发布的演示代码,它看起来像服务层只是存储库模式的另一个包装器,根本不执行任何工作.
我也读过这篇文章:http://www.asp.net/Learn/mvc/tutorial-38-cs.aspx,但它似乎有点回答了我的问题,但是,如果你使用数据注释来执行验证,这个似乎没必要.
我已经寻找过演示,帖子等等,但我似乎找不到任何简单解释模式的东西,并给我提供了令人信服的证据来使用它.
有人可以请我提供二年级(好的,可能是五年级)使用这种模式的理由,如果我不这样做会失去什么,如果我这样做会得到什么?
小智 35
在MVC模式中,您需要在3个玩家之间分离责任:模型,视图和控制器.
模型负责做业务,View显示业务的结果(也提供来自用户的业务输入),而Controller就像模型和视图之间的粘合,将每个的内部工作分开.另一个.
模型通常由数据库备份,因此您有一些DAO访问它.您的企业做了一些......嗯......业务和商店或从数据库中检索数据.
但谁协调DAO?控制器?没有!模型应该.
进入服务层.服务层将为控制器提供高服务,并将在幕后管理其他(较低级别)播放器(DAO,其他服务等).它包含您的应用程序的业务逻辑.
如果你不使用它会发生什么?
您必须将业务逻辑放在某处,受害者通常是控制器.
如果控制器是以网络为中心的,则必须接收其输入并作为HTTP请求,响应提供响应.但是,如果我想从与RPC或其他东西通信的Windows应用程序中调用我的应用程序(并访问它提供的业务),该怎么办?然后怎样呢?
那么,你将不得不重写控制器并使逻辑客户端不可知.但是通过服务层,您已经拥有了它.你不需要改写东西.
服务层提供与DTO的通信,DTO不依赖于特定的控制器实现.如果控制器(无论哪种类型的控制器)提供适当的数据(无源),您的服务层将为调用者提供服务,并使调用者隐藏所涉及的业务逻辑的所有职责.