当前位置:Gxlcms > PHP教程 > ThinkPHP数据层的疑惑

ThinkPHP数据层的疑惑

时间:2021-07-01 10:21:17 帮助过:9人阅读

在看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:

namespace Analytics\Service;


class AnalyticsService {

    public function get_date_range_by_input() {}

}

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

人气教程排行