为什么在某些框架中将逻辑层称为“模型”,而在某些框架中将其称为“服务”。它们是彼此不同还是只是命名约定不同?
更新1
我问的原因是因为在传统的MVC框架Zend Framework中,每个人都使用模型的概念。现在我正在学习AngularJS,似乎Model一词消失了,由service一词代替了。
我注意到的是,服务更像是可以反复使用的单例(例如:REST客户端),而模型则与MVC模式中来自控制器的数据操作更为相关。
为什么在某些框架中将逻辑层称为“模型”,而在某些框架中将其称为“服务”。它们是彼此不同还是只是命名约定不同?
更新1
我问的原因是因为在传统的MVC框架Zend Framework中,每个人都使用模型的概念。现在我正在学习AngularJS,似乎Model一词消失了,由service一词代替了。
我注意到的是,服务更像是可以反复使用的单例(例如:REST客户端),而模型则与MVC模式中来自控制器的数据操作更为相关。
Answers:
模型:属于对象的字段,帮助从对象获取/设置数据的方法(返回名字和姓氏的全名访问器)
服务:使用一个或多个模型执行操作的方法,请参见“工作单元”,事务等。
Employee :: create应该只获取一组数据,必要时执行模型验证,然后返回Employee对象。
EmployeeService :: hireEmployee可能会创建员工,向他们发送欢迎电子邮件,创建邮箱,将他们设为三明治等。。。它可能会返回数据集或结果代码等。
这也会影响验证:
模型验证:员工必须具有ID,名字和姓氏以及生日
服务验证:调酒师职位的员工必须年满21岁,并得到经理的批准。
根据我的经验,MVC 设计模式中的“ 模型”层是指与数据操作有关的每个软件组件(POJO,DAO,一直到SQL,JDBC等)。
而服务层实际上是对MVC的补充:
我们知道在控制器层内部调用了模型层组件。一旦构建了后者,您就会意识到它看起来并不简洁(凌乱的脏代码);控制器可能无法提供其他详细信息(例如,在调用将要使用的DAO方法之前格式化请求参数...)。因此,您可能包括此额外的层,即服务层。
最终,您可能会将脏代码包含在具有有意义名称,参数等的静态方法中,这将产生一个合成的Controller层。
看一下这个链接:
/programming/2762978/the-purpose-of-a-service-layer-and-asp-net-mvc-2
这些基类在结构上是相同的,但是它们用于对MVCS实现的服务和模型层的不同关注点进行分类
Service:- A concrete service class defines the API of an external Service.
Model :- Defines the API of the applications data model.
因此,尽管基本类是相同的,但通过扩展这些基本类而创建的具体类可用于两个完全不同的目的。