Home  >  Article  >  Backend Development  >  ThinkPHP 数据层的疑惑

ThinkPHP 数据层的疑惑

WBOY
WBOYOriginal
2016-06-06 20:27:541063browse

在看TP的时候,看到这样一段描述:

数据层:Model/UserModel 用于定义数据相关的自动验证和自动完成和数据存取接口
逻辑层:Logic/UserLogic 用于定义用户相关的业务逻辑
服务层:Service/UserService 用于定义用户相关的服务接口等

这些层有什么区别,是么时候能用到,互相之间是相关联的还是独立的

回复内容:

在看TP的时候,看到这样一段描述:

数据层:Model/UserModel 用于定义数据相关的自动验证和自动完成和数据存取接口
逻辑层:Logic/UserLogic 用于定义用户相关的业务逻辑
服务层:Service/UserService 用于定义用户相关的服务接口等

这些层有什么区别,是么时候能用到,互相之间是相关联的还是独立的

直接贴我在SF第一个回答吧。 总结一句,就呢么回事儿~ 不要让这些乱七八糟的东西扰乱了视线。

------------ 原答案:
最近在做的东西用的刚好就是ThinkPHP 3.2.x 版本;至于symfony除了用到一些库之外 并不是很熟悉,所以就不献丑了。

按我的理解,TP中的Service可以理解为API, 并不是像LZ理解的C和M的中间层,M层是用到和数据库交互的;而Service中,则不限定于此,作用是为控制器或其他东西提供规范化的「服务」接口供使用(Service)。

举个例子,「User」「Department」两个Model,分别对应其对数据表的CURD操作。 「UserService」提供 「authroize」、「get_department」、「is_authenticated」等「服务接口」。 无非是把原先全部让Model做的事儿更加细致的分离出来,包括TP中的Logic也是一样,虽然现在没有怎么用到。

---------- 补几句:
Model 就是和数据库打交道的,CURD,更好的来说是仅read,通常来说要继承ViewModel。
Service 和 Logic 就是封装服务接口和业务逻辑的。 通常来说继承Model或者RelationModel 或者AdvModel, 或者啥也不继承,就是提供接口

eg:

<code>namespace Analytics\Service;


class AnalyticsService {

    public function get_date_range_by_input() {}

}</code>

举个栗子:
老板让产品经理开发一个图书馆管理系统,产品经理找各个程序员完成,每个程序员做不同的模块。
老板就是表现层,
产品经理就是服务层,
程序员就是逻辑层。
他们之间是有协议(劳工合同)互相连接的。
但是各自独立存在。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn