controller层
- 接收并验证参数的基本类型正确性和参数的必须性。
- 调用service层。
- 返回响应。
model层(dao层)
- 访问数据库。
service层
- 处理具体业务逻辑。
- 调用model层。
- 返回结果。
- 需灵活的解耦不能彼此调用。
可参考:PHP中service层怎么设计兼顾优雅和方便?
| |
| |
| |
| |
| public function getList(UserCriteria criteria, $limit = 10, $offset = 0) { |
| ... |
| } |
| |
| |
| |
| |
| |
| class UserCriteria |
| { |
| public $name; |
| |
| public $age; |
| |
| |
| |
| |
| public static function fromRequest(Request $req) |
| { |
| $instance = new static; |
| $instance->name = $req->input('name'); |
| |
| return $instance; |
| } |
| } |
| |
| |
| public function index(Request $req) |
| { |
| $criteria = UserCriteria::fromRequest($req); |
| $userList = $this->userService->getList($criteria, 10); |
| |
| } |
lib区
在service层建一个依赖区lib。将serviceA依赖serviceB的公共方法提出来,建个类(或Trait)完成解耦。
开发思路
- 先使用最简单的m + c。(那业务逻辑将往c层放)
- 遇到或预判到重复逻辑,则提取到service层。
一般目录结构
| 丨-Controller |
| 丨-Model |
| 丨-Service |
| 丨--Lib |
编码规范注意
编码规范采用国际通用的PSR-1。
- 常量必须全部大写,词间以下划线分隔,即CONSTANT_XXX;
- 类和命名空间遵循大写开头的驼峰命名规范,即ClassA;
- 类的属性遵循下划线分隔式,即$m_user;
- 类的方法遵循小写开头驼峰命名,即userLogin();
使用环境变量时,尽量用 HTTP_HOST,而不是 SERVER_NAME。参考
判断文件是否存在,用 if_file;判断目录是否存在,用 if_dir;尽量不要用 file_exists,因为慢。参考
关于Git提交
参考:一个维护版本日志整洁的Git提交规范
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!