写给初生牛犊没有怕虎的童鞋们,年夜佬可随便摘看 本章基于PHP Laravel
媒介
常常会有人问
- 目次若何设计比拟好?
- 代码若何散布好?
- 怎样写一个可保护的名目?
“烂”名目我也没少写,如下是参考互联网各年夜佬的文章总结及集体开发经历而来.
Controller
Controller望文生义是管制器,正在入门PHP的时分,就晓得Controller代表MVC中的C层,MVC自身的概念就代码别离,教你若何若何将营业离开,但面对着营业的一直倒退,代码的复杂度也随之进步,性能与性能之间的链接盘根错节,最初你的MVC就变为了下图,以是仅仅依靠MVC的设计思维曾经无奈撑持一直倒退的营业。
如今咱们将Controller的义务以及才能从新界说,管制器仅仅管制Http Reqeust的申请,这样就合乎了SOLID 繁多性能准则.
间接将营业代码写正在Controller中,会使患上代码及其痴肥,不容易于保护以及扩大
<?php namespace App\Http\Controller; class UserController extends Controller{ public function register(Request $request){ $user = new User(); $user->username = $request->input('username'); $user->password = $request->input('password'); $result = $user->save(); return $result; } }复制代码
这时候就应该考虑若何别离营业代码,咱们引入Service的概念
Service
Service自身译为效劳
- 将内部办法,公共办法注入到Service
- 将Service注入到管制器
像上图这样
UserController
<?php namespace App\Http\Controller; class UserController extends Controller{ public $request; protected $userService; public function __construct(Request $request, UserService $userService) { $this->request = $request; $this->userService = $userService; } public function register() { //... validation return $this->userService->register ($this->request->all()); } }复制代码
UserService
<?php namespace App\Service; class UserService{ public function register($data) { $username = $data['username']; $password = $data['password']; $password = encrypt ($password); $user = new User(); $user->username = $username; $user->password = $password; $result = $user->save(); return $result; } }复制代码
到如今为止,咱们至多将营业与申请彻底离开了。但仍是没有如人意,假如把一切的营业及CURD全副写正在Service中,那只不外是将Controller的痴肥转移到了Service,那Service就不甚么存在乎义了。 以是咱们需求持续宰割Service,将对数据库的R操作自力进去,由于CUD的操作根本是一向没有变的,而R操作依据营业的复杂度则变的多姿多彩。以是自力R操作。这个时分咱们援用Repository的概念。
Repository
咱们应用Repository辅佐Model,将相干的查问逻辑封装到没有同的repository中,不便逻辑代码的保护
- 合乎SOLID的繁多准则
- 合乎SOLID的依赖反转
UserController
<?php namespace App\Http\Controller; class UserController extends Controller{ public $request; protected $userService; public function __construct(Request $request, UserService $userService) { $this->request = $request; $this->userService = $userService; } public function getUserInfo() { //... validation return $this->userService->getUserInfo ($this->request->all()); } }复制代码
UserService
<?php namespace App\Service; class UserService{ public $userRepository; public function __construct(UserRepository $userRepository){ $this->userRepository = $userRepository; } public function getUserInfo() { return $this->userRepository->getUserInfo($data); } }复制代码
UserRepository
<?php namespace App\Repository; class UserRepository{ public function getUserInfo($data) { $userId = $data['user_id']; $result = User::where('id',$userId)->first(); return $result; } }复制代码
处理了R的成绩,有人就问了,莫非由于CUD比拟对立简略就能够放正在一同了吗?谜底是NO,咱们援用一个新的名词Action。
Action
这是看了@Charlie_Jade的文章才学到的
自力每一个操作文件,例如CreateUser,DeleteUser,UpdateUser
- 合乎SOLID的繁多准则
UserController
<?php namespace App\Http\Controller; class UserController extends Controller{ public $request; protected $userService; public function __construct(Request $request, UserService $userService) { $this->request = $request; $this->userService = $userService; } public function register(){ //... validation return $this->userService->register($this->request->all()); } public function getUserInfo() { return $this->userService->getUserInfo ($this->request->all()); } }复制代码
UserService
<?php namespace App\Service; class UserService{ public function getUserInfo(UserRepository $userRepository) { return $this->userRepository->getUserInfo($data); } public function register(){ $result = (new CreateUser())->execute($this->request->all()); return $result; } }复制代码
UserRepository
<?php namespace App\Repository; class UserRepository{ public function getUserInfo($data) { $userId = $data['user_id']; $result = User::where('id',$userId)->first(); return $result; } }复制代码
CreateUser
<?php namespace App\Action; use App\Model\Member; class CreateUser extends CreateUserWallet { public function execute(array $data) { $models = new Member(); $models->tel = $data['tel']; $models->password = $data['password']; $result = $models->save (); return $result; } }复制代码
以上代码逻辑见下图
除了模版(V)等HTML,JS等,还需求一些其余的规定,或许说是形式去完成一些代码的解耦合,如下再也不提供代码案例。
Co妹妹on
译为公共的,罕用的,再局部开发中,你可能需求一些公共的办法(并不是公共的类,例如邮件发送等,用他其实不合适),比方查问用户余额,查问用户能否注册或许能否正在线,天生定单号等。应用Co妹妹on更要简略。他更像一个公共函数库的样子
Event
没有关怀执行后果时能够选应用,不外Event的Listen也是提供了行列步队。
Exception
没有要将你的一切谬误提醒都应用Return前往,不少时分你的前往未必是你的前往
称谢
感激列位同窗看完这篇文章,假如你有新的设法主意欢送正在评论区探讨.
保举教程:《php教程》
以上就是若何写出高品质的PHP代码的具体内容,更多请存眷资源魔其它相干文章!
标签: php php开发教程 php开发资料 php开发自学 后端 Laravel MVC