ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
#### thinkphp5模型三层结构逻辑层服务层数据层 * * * * * thinkphp5.0官方手册大致讲解了MVC三层结构以及模型分层:逻辑层、服务层、数据层,官网上是这样讲的: ThinkPHP支持模型的分层 ,除了Model层之外,我们可以根据项目的需要设计和创建其他的模型层。 通常情况下,不同的分层模型仍然是继承系统的\think\Model类或其子类,所以,其基本操作和Model类的操作是一致的。 例如,在Home模块的设计中需要区分数据层、逻辑层、服务层等不同的模型层,我们可以在模块目录下面创建model、logic和service目录,把对用户表的所有模型操作分成三层: 1. 数据层:app\index\model\User 用于定义数据相关的自动验证和自动完成和数据存取接口 2. 逻辑层:app\index\logic\User 用于定义用户相关的业务逻辑 3. 服务层:app\index\service\User 用于定义用户相关的服务接口等 三个模型层的定义如下: app\index\model\User.php ~~~ namespace app\index\model; use think\Model; class User extends Model { } ~~~ 实例化方法:`\think\Loader::model('User')` Logic类:app\index\logic\User.php ~~~ amespace app\index\logic; use think\Model; class User extends Model { } ~~~ 实例化方法:`\think\Loader::model('User','logic');` Api类:app\index\api\User.php ~~~ namespace app\index\api; use think\Model; class User extends Model { } ~~~ 实例化方法:`\think\Loader::model('User','api');` 这只是简单地说了这三个层如何声明以及实例化,这让很多想弄明白如何区分这三个层,他们存在的目的究竟是什么?在这三个层具体要写什么代码?对此表示不理解。 其实,官方已经明确说明了,我们没有必要非要硬性区分三个层,我们完全可以全写在一个Model中。 如果想分开写,你记住: * Model 负责模型定义 比如声明一个User字段自动验证的内容。 * Logic 这是一个逻辑层,说白了就是业务逻辑性的功能写在这个类里。 * Service 这个其实就是负责数据库交互的。