php 高质量代码,如何写出高质量的PHP代码

d1e6f0794f4b6fc38e05e0a87aa1c6bc.pngUserController<?php

namespace AppHttpController;

class UserController extends Controller{

public $request;

protected $userService;

public function __construct(Request $request, UserService $userService)

{$this->request = $request;

$this->userService = $userService;

}

public function register()

{

//... validationreturn $this->userService->register ($this->request->all());

}

}复制代码

UserService<?php

namespace AppService;

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的依赖反转d334a0eca1cc51450eeac01d30dbd3a4.pngUserController<?php

namespace AppHttpController;

class UserController extends Controller{

public $request;

protected $userService;

public function __construct(Request $request, UserService $userService)

{$this->request = $request;

$this->userService = $userService;

}

public function getUserInfo()

{

//... validationreturn $this->userService->getUserInfo ($this->request->all());

}

}复制代码

UserService<?php

namespace AppService;

class UserService{

public $userRepository;

public function __construct(UserRepository $userRepository){ $this->userRepository = $userRepository;

}

public function getUserInfo()

{ return $this->userRepository->getUserInfo($data);

}

}复制代码

UserRepository<?php

namespace AppRepository;

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的单一原则1e4b0916b5b8af97f797c2387a2e8dda.pngUserController<?php

namespace AppHttpController;

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 AppService;

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 AppRepository;

class UserRepository{

public function getUserInfo($data)

{ $userId = $data['user_id']; $result = User::where('id',$userId)->first();

return $result;

}

}复制代码

CreateUser<?php

namespace AppAction;

use AppModelMember;

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;

}

}复制代码

以上代码逻辑见下图b8af2446aadc71f8953854ced9cba56a.pngCommon

译为公共的,常用的,再部分开发中,你可能需要一些公共的方法(并非公共的类,例如邮件发送等,用他并不合适),比如查询用户余额,查询用户是否注册或者是否在线,生成订单号等。使用Common更要简单。他更像一个公共函数库的样子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值