0

API と連携するオブジェクトを開発しています。API への呼び出しには、認証が必要なものとそうでないものがあります。ベストプラクティスに関しては、

a) 認証メソッドはトークンを返します。メソッドは、認証が必要な API 呼び出し/メソッドへの呼び出しの直前にコントローラーから呼び出され、トークンがパラメーターとして渡されます。

class api {
    public function auth() {
        .....
        return $token;
    }
    public function getInfo($token) {
        .....
    }

b) 認証メソッドは、トークンを使用してクラスのプロパティを設定します。認証が必要なメソッドを呼び出す前に、メソッドを呼び出すことを忘れないでください。

class api {
    private $token;
    public function auth() {
        .....
        $this->token = $token;
    }
    public function getInfo() {
        $token = $this->token;
        .....
    }

c) auth メソッド自体への auth 呼び出しが必要なメソッド

class api {
    private $token;
    public function auth() {
        .....
        return $token;
    }
    public function getInfo() {
        $token = $this->auth();
        .....
    }

上記は、認証API呼び出しへの不要な呼び出しを保存するためのプロパティとしてキャッシュされた認証を持つことができると思います。

それとも他の方法ですか?そのようなオブジェクトのベストプラクティスとその理由を探しているだけです。前もって感謝します!

4

2 に答える 2

2

「c」は行く方法です。

他のオブジェクトは、どのメソッドが認証を必要とし、どのメソッドが必要でないかを知る必要はありません。

事実... auth() メソッドはパブリックであってはならず、資格情報「ユーザー、パス」は api クラスのコンストラクターを介して渡される必要があります。

参照: http://en.wikipedia.org/wiki/Separation_of_concerns

于 2013-10-17T16:49:08.937 に答える
1

利用可能な3つの選択肢の中では、長期的な保守性を考慮すると、オプションAが優れています。publicこれは、すべてのメソッドをテストする必要があるためです。パブリック メソッドへの内部呼び出しを行う代わりに値を直接渡すと、その特定のクラスの単体テストを簡単に記述できます。

とは言っても、この投稿で説明されているように、認証は通常、他のことも行うクラスの一部ではなく、独自のものになります。あなたの例の方法は、 SRPに違反していると思われます。

アップデート

考えてみると、1 つの public メソッドが別の public メソッドを依存関係として持つクラスを持つことは、SRP 違反に関連するコードの匂いと見なされる可能性があります。

于 2013-10-17T18:48:40.183 に答える