久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      基于PHP Laravel,聊聊少寫PHP "爛"代碼的方法??!

      本篇文章給大家詳細(xì)介紹一下如何少寫PHP "爛"代碼??!有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)大家有所幫助。

      基于PHP Laravel,聊聊少寫PHP &quot;爛&quot;代碼的方法??!

      寫給初生牛犢不怕虎的童鞋們,大佬可隨意摘看 本章基于PHP Laravel

      前言

      經(jīng)常會(huì)有人問(wèn)

      • 目錄如何設(shè)計(jì)比較好?
      • 代碼如何分布好?
      • 怎么寫一個(gè)可維護(hù)的項(xiàng)目?

      “爛”項(xiàng)目我也沒少寫,以下是參考互聯(lián)網(wǎng)各大佬的文章總結(jié)及個(gè)人開發(fā)經(jīng)驗(yàn)而來(lái).

      Controller

      基于PHP Laravel,聊聊少寫PHP &quot;爛&quot;代碼的方法??!

      Controller顧名思義是控制器,在入門PHP的時(shí)候,就知道Controller代表MVC中的C層,MVC本身的概念就代碼分離,教你如何如何將業(yè)務(wù)分開,但面臨著業(yè)務(wù)的不斷發(fā)展,代碼的復(fù)雜度也隨之提高,功能與功能之間的鏈接錯(cuò)綜復(fù)雜,最后你的MVC就變成了下圖,所以僅僅依托MVC的設(shè)計(jì)思想已經(jīng)無(wú)法支撐不斷發(fā)展的業(yè)務(wù)。

      現(xiàn)在我們將Controller的任務(wù)和能力重新定義,控制器僅僅控制Http Reqeust的請(qǐng)求,這樣就符合了SOLID 單一功能原則.

      基于PHP Laravel,聊聊少寫PHP &quot;爛&quot;代碼的方法!!

      直接將業(yè)務(wù)代碼寫在Controller中,會(huì)使得代碼及其臃腫,不易于維護(hù)和擴(kuò)展

      <?php 	namespace AppHttpController;  	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; 		}  	}

      這時(shí)就應(yīng)該思考如何分離業(yè)務(wù)代碼,我們引入Service的概念

      Service

      Service本身譯為服務(wù)

      • 將外部方法,公共方法注入到Service
      • 將Service注入到控制器

      基于PHP Laravel,聊聊少寫PHP &quot;爛&quot;代碼的方法?。?/></p>
<p>像上圖這樣</p>
<h3 data-id=UserController

      <?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()); 		}  	}

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

      到現(xiàn)在為止,我們至少將業(yè)務(wù)與請(qǐng)求徹底分開了。但還是不如人意,如果把所有的業(yè)務(wù)及CURD全部寫在Service中,那只不過(guò)是將Controller的臃腫轉(zhuǎn)移到了Service,那Service就沒有什么存在意義了。 所以我們需要繼續(xù)分割Service,將對(duì)數(shù)據(jù)庫(kù)的R操作獨(dú)立出來(lái),因?yàn)镃UD的操作基本是一貫不變的,而R操作根據(jù)業(yè)務(wù)的復(fù)雜度則變的多姿多彩。所以獨(dú)立R操作。這個(gè)時(shí)候我們引用Repository的概念。

      Repository

      我們使用Repository輔助Model,將相關(guān)的查詢邏輯封裝到不同的repository中,方便邏輯代碼的維護(hù)

      • 符合SOLID的單一原則
      • 符合SOLID的依賴反轉(zhuǎn)

      基于PHP Laravel,聊聊少寫PHP &quot;爛&quot;代碼的方法??!

      UserController

      <?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() 		{ 			//... validation 			return $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的問(wèn)題,有人就問(wèn)了,難道因?yàn)镃UD比較統(tǒng)一簡(jiǎn)單就可以放在一起了嗎?答案是NO,我們引用一個(gè)新的名詞Action。

      Action

      這是看了@Charlie_Jade的文章才學(xué)到的

      獨(dú)立每個(gè)操作文件,例如CreateUser,DeleteUser,UpdateUser

      • 符合SOLID的單一原則

      基于PHP Laravel,聊聊少寫PHP &quot;爛&quot;代碼的方法?。?/></p>
<h3 data-id=UserController

      <?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; 		} 	}

      以上代碼邏輯見下圖

      基于PHP Laravel,聊聊少寫PHP &quot;爛&quot;代碼的方法?。?/></p>
<p>除模版(V)等HTML,JS等,還需要一些其他的規(guī)則,或者說(shuō)是方式去實(shí)現(xiàn)一些代碼的解耦合,以下不再提供代碼案例。</p>
<h1 data-id=Common

      譯為公共的,常用的,再部分開發(fā)中,你可能需要一些公共的方法(并非公共的類,例如郵件發(fā)送等,用他并不合適),比如查詢用戶余額,查詢用戶是否注冊(cè)或者是否在線,生成訂單號(hào)等。使用Common更要簡(jiǎn)單。他更像一個(gè)公共函數(shù)庫(kù)的樣子

      基于PHP Laravel,聊聊少寫PHP &quot;爛&quot;代碼的方法??!

      Event

      不關(guān)心執(zhí)行結(jié)果時(shí)可以選使用,不過(guò)Event的Listen也是提供了隊(duì)列。

      Exception

      不要將你的所有錯(cuò)誤提示都使用Return返回,很多時(shí)候你的返回未必是你的返回

      推薦學(xué)習(xí):《PHP視頻教程》

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)