MVC:模型和服务之间有什么区别?


15

为什么在某些框架中将逻辑层称为“模型”,而在某些框架中将其称为“服务”。它们是彼此不同还是只是命名约定不同?


更新1

我问的原因是因为在传统的MVC框架Zend Framework中,每个人都使用模型的概念。现在我正在学习AngularJS,似乎Model一词消失了,由service一词代替了。

我注意到的是,服务更像是可以反复使用的单例(例如:REST客户端),而模型则与MVC模式中来自控制器的数据操作更为相关。


分享您的研究成果对所有人都有帮助。告诉我们您尝试过的内容以及为什么它不能满足您的需求。这表明您已花时间尝试自我帮助,这使我们免于重复显而易见的答案,并且最重要的是,它可以帮助您获得更具体和相关的答案。另请参阅“ 如何提问
2014年

用莎士比亚来解释:名字上有玫瑰,其他名字都叫玫瑰。您的应用程序模型很可能实现为服务。
jwenting

Answers:


22

模型:属于对象的字段,帮助从对象获取/设置数据的方法(返回名字和姓氏的全名访问器)

服务:使用一个或多个模型执行操作的方法,请参见“工作单元”,事务等。


Employee :: create应该只获取一组数据,必要时执行模型验证,然后返回Employee对象。

EmployeeService :: hireEmployee可能会创建员工,向他们发送欢迎电子邮件,创建邮箱,将他们设为三明治等。。。它可能会返回数据集或结果代码等。


这也会影响验证:

模型验证:员工必须具有ID,名字和姓氏以及生日

服务验证:调酒师职位的员工必须年满21岁,并得到经理的批准。


感谢您提供一个非常具体的示例,该示例说明了真实单词业务逻辑的复杂程度,以及为什么除了模型层之外还可以提供额外的服务层。
wlnirvana

3

根据我的经验,MVC 设计模式中的“ 模型”层是指与数据操作有关的每个软件组件(POJO,DAO,一直到SQL,JDBC等)。

而服务层实际上是对MVC的补充:

我们知道在控制器层内部调用了模型层组件。一旦构建了后者,您就会意识到它看起来并不简洁(凌乱的脏代码);控制器可能无法提供其他详细信息(例如,在调用将要使用的DAO方法之前格式化请求参数...)。因此,您可能包括此额外的层,即服务层。

最终,您可能会将脏代码包含在具有有意义名称,参数等的静态方法中,这将产生一个合成的Controller层。

看一下这个链接:

/programming/2762978/the-purpose-of-a-service-layer-and-asp-net-mvc-2


1
这正是我也看到服务层的方式。但是,然后,我经常看到它被用来将外部API服务到业务模型中。我认为这两种情况都是有效的。这里的问题只是术语的冲突。
burntblark

2

这些基类在结构上是相同的,但是它们用于对MVCS实现的服务和模型层的不同关注点进行分类

Service:- A concrete service class defines the API of an external Service.

Model :- Defines the API of the applications data model.

因此,尽管基本类是相同的,但通过扩展这些基本类而创建的具体类可用于两个完全不同的目的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.