ホームページ  >  記事  >  バックエンド開発  >  高品質な PHP コードの書き方

高品質な PHP コードの書き方

coldplay.xixi
coldplay.xixi転載
2020-06-18 17:08:453197ブラウズ

高品質な PHP コードの書き方

トラを恐れない生まれたばかりの子牛のために書かれているので、自由に読んでください。この章は PHP Laravel に基づいています

はじめに

人々はよく尋ねます

  • ディレクトリをより適切に設計するにはどうすればよいですか?
  • コードを適切に配布するにはどうすればよいでしょうか?
  • 保守可能なプロジェクトの書き方?

私は「悪い」プロジェクトについても書いています。以下は、記事の要約と主要なインターネット専門家の個人的な開発経験に基づいています。

Controller

高品質な PHP コードの書き方

Controller は、その名前が示すように、コントローラーです。PHP を使い始めると、Controller が次のことを表すことがわかります。 MVC の C 層です。MVC 自体の概念は、ビジネスを分離する方法を教えるコード分離です。しかし、ビジネスが発展し続けるにつれて、コードの複雑さも増し、機能間のつながりも複雑になります。最終的に、MVC は次の図のようになります。MVC の設計アイデアだけに依存すると、成長するビジネスをサポートできなくなります。

ここで、コントローラーのタスクと機能を再定義します。コントローラーは、SOLID 単一関数原則に準拠する Http Reqeust リクエストのみを制御します。

高品質な PHP コードの書き方

ビジネス コードをコントローラーに直接記述すると、コードが非常に肥大化し、保守や拡張が困難になります。

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

サービス自体はサービスとして翻訳されます

  • 外部メソッドとパブリック メソッドをサービスに挿入します
  • サービスをコントローラーに挿入します
高品質な PHP コードの書き方

上の図のように

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[&#39;username&#39;];            $password = $data[&#39;password&#39;];         
			$password = encrypt ($password);			
			$user = new User();			$user->username = $username;			$user->password = $password;			$result = $user->save();			return $result;
		}

    }复制代码

これまで、私たちは少なくともビジネスとリクエストを完全に分離してきました。しかし、それでも不十分で、ビジネスや CURD をすべて Service で書いてしまうと、肥大化した Controller を Service に移すだけになり、Service の存在意味がなくなってしまいます。 したがって、サービスを分割し、データベースの R 操作を分離し続ける必要があります。CUD の操作は基本的に同じですが、R 操作はビジネスの複雑さに応じてより多彩になるためです。したがって、スタンドアロンの R 操作。この時点では、リポジトリの概念について言及します。

リポジトリ

リポジトリ補助モデルを使用して、関連するクエリ ロジックをさまざまなリポジトリにカプセル化し、ロジック コードのメンテナンスを容易にします

  • SOLID # の単一原則に準拠します。
  • ##SOLID 準拠の依存関係の反転
高品質な PHP コードの書き方
##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[&#39;user_id&#39;];            $result = User::where(&#39;id&#39;,$userId)->first();			
			return $result;
		}

    }复制代码

R の問題を解決した後、CUD は比較的統一されていてシンプルなので、R をまとめることができるのではないかと誰かが尋ねました。答えは「いいえ」です。新しい名詞「アクション」を引用します。

アクション

これは @Charlie_Jade の記事を読んだ後に学んだことです

CreateUser、DeleteUser、UpdateUser などの各操作ファイルに依存しない

SOLID の単一原則に準拠

##UserController高品質な PHP コードの書き方
<?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[&#39;user_id&#39;];            $result = User::where(&#39;id&#39;,$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;
		}
	}复制代码

上記のコード ロジックを次の図に示します

Exceptテンプレート (V) HTML、JS などの場合、一部のコードの分離を実現するには、他のルールまたはメソッドが必要です。以下にはコード例はありません。 高品質な PHP コードの書き方

Common

は public と訳され、一般的に使用されます。開発によっては、いくつかのパブリック メソッドが必要になる場合があります (電子メール送信などの非パブリック クラスは、使用するのが適切ではありません)。ユーザー残高のクエリ、ユーザーが登録されているかオンラインであるかどうかのクエリ、注文番号の生成など。 Common を使用するのはさらに簡単です。これはパブリック関数ライブラリに似ています。

高品質な PHP コードの書き方

Event

イベントを気にしない場合は、これを使用することを選択できます。実行結果だけでなく、イベント キューのリッスンも提供されます。

例外

すべてのエラー メッセージを返すために Return を使用しないでください。多くの場合、あなたの戻り値はあなたの戻り値ではない可能性があります

ありがとうございます

皆さんありがとうございます。この記事を読んだ後、新しいアイデアがあれば、コメント欄でお気軽に議論してください。

推奨チュートリアル: "php チュートリアル "

以上が高品質な PHP コードの書き方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.imで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。