Written for those newborn calves who are not afraid of tigers, you can read it at will. This chapter is based on PHP Laravel
People often ask
I also write about "bad" projects. The following is based on the summary of articles and personal development experience of major Internet experts.
Controller, as the name suggests, is a controller. When you get started with PHP, you know that Controller represents the C layer in MVC. The concept of MVC itself is code separation, which teaches you how to separate businesses. However, as the business continues to develop, the complexity of the code also increases, and the links between functions are intricate. In the end, your MVC becomes As shown in the figure below, relying solely on the MVC design idea can no longer support the growing business.
Now we redefine the tasks and capabilities of the Controller. The controller only controls Http Reqeust requests, which complies with the SOLID single function principle.
Writing business code directly in the Controller will make the code extremely bloated and difficult to maintain and expand
<?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; } }复制代码
At this time, we should think about how to separate the business code, and we introduce the concept of Service
Service itself is translated as service
Like the picture above
<?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()); } }复制代码
<?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; } }复制代码
Until now , we at least completely separate the business from the requests. But it is still unsatisfactory. If all business and CURD are written in Service, it will just transfer the bloat of Controller to Service, and then Service will have no meaning in existence. Therefore, we need to continue to divide the Service and separate the R operations of the database, because the operations of CUD are basically the same, while the R operations become more colorful according to the complexity of the business. So standalone R operation. At this time we refer to the concept of Repository.
We use Repository auxiliary Model to encapsulate relevant query logic into different repositories to facilitate the maintenance of logic code
<?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()); } }复制代码
<?php namespace App\Service; class UserService{ public $userRepository; public function __construct(UserRepository $userRepository){ $this->userRepository = $userRepository; } public function getUserInfo() { return $this->userRepository->getUserInfo($data); } }复制代码
<?php namespace App\Repository; class UserRepository{ public function getUserInfo($data) { $userId = $data['user_id']; $result = User::where('id',$userId)->first(); return $result; } }复制代码
This is what I learned after reading @Charlie_Jade’s articleIndependent of each operation file, such as CreateUser, DeleteUser, UpdateUser
<?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()); } }复制代码
<?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; } }复制代码
<?php namespace App\Repository; class UserRepository{ public function getUserInfo($data) { $userId = $data['user_id']; $result = User::where('id',$userId)->first(); return $result; } }复制代码
<?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; } }复制代码
The above is the detailed content of How to write high-quality PHP code. For more information, please follow other related articles on the PHP Chinese website!