2012-03-28 1 views
1

お元気ですか、基本に関する助けが必要です。私はAPIを参照するクラスを作成しており、いくつかの基本的な質問があります。最初に接続して検証するにはAPIが必要です。応答の各部分を提供する必要があります。だから私の論理は...PHPクラスロジック、OOP、各クラスのAPIを検証しますか?

Class getBalance(){ 

    function validate(){ 
    Do validation... 
    } 
    function getAmount(){ 
    var amount = obeject->amount; 
    return amount; 
    } 
    function getDate(){ 
    var amount = obeject->date; 
    return date; 
    } 
    function getCount(){ 
    var amount = obeject->count; 
    return count; 
    } 

} 

私の最初の質問は...検証はコンストラクタで処理する必要がありますか?呼び出しが行われるたびに実行する必要はなく、APIを1回実行するだけで済みます。あなたがgetBalance :: getAmount()、getBalance :: getDate()などを呼び出すたびに、コンストラクタにputすることでapiを呼び出すでしょうか?または、検証が完全に分離されるべきですか?または、検証からオブジェクトを戻し、毎回クラスに戻す必要がありますか?申し訳ありませんが、基本的なもので、ベストプラクティスを探しています。ありがとう。

答えて

0

まず、あなたのお見積もりの​​コードは無効なPHP構文です(疑似コードと呼ぶことができます)。

あなたは、コンストラクタで検証を行う場合、あなたが$instance->getAmount();$instance->getDate();などを呼び出すwehnあなたは

$instance = new getBalance; 

を行う初回のみが続いて、それが再び呼び出されることはありませんと呼ばれます。私は実際にはのような構築物から検証を呼ぶだろう、あなたの問題については何も知らず

:それはあなたのために動作しない場合

public function __construct(){ 
    $this->validate(); 
} 

、その後、手の込んだ。

+0

Veseliq、ありがとう、完璧です!申し訳ありませんが、あなたの質問に答えて –

+0

答えがあなたに役立った場合は、それを正しいとして受け入れるか、または投票してください。 – ddinchev

1

ユーザーがWebサイトの「ログインしたユーザーのみ」セクションを要求したときに、ログインしているユーザーを検証すると考えてください。つまり、ユーザーは新しいリクエストが行われるたびに検証されます。つまり、サイトの大部分がセッションを介してこれを実行するため、ユーザーが実際に知っていることはありません(Dが分かっていない限り)。 API、つまり、有効なユーザーを必要とするすべてのAPI要求にユーザーの検証が必要です。

他のものがなければ、Balanceクラスは検証を心配すべきではありません。Validationクラスを作成し、必要に応じて静的に呼び出す必要があります(もちろん、その状態を保存して、単一のリクエスト中に検証を真に保つことができます)。

1

可能な限りデカップリングするのがベストプラクティスです。

  • コンストラクタは、初期化のために使用すべきである(2段構成)
  • コンストラクタは、「仕事をする」ことができます(1段構成)が

を二は次のとおりです。コンストラクタの2つの考え方があります。場合によってはより便利で賢明なものもありますが、最初はフレームワークをテストしやすくしますが、これは非常に重要です。

検証が必要なときに一度実行されるが、それ以外の場合は一度だけ実行される何らかの遅延初期化(コンストラクタでの呼び出しの有無にかかわらず)を行うこともできます。これは、コードの冗長性を向上させるが、それは、より効率的な場合があります

private $validated = false; 
public function getAmount() { 
    if (!$this->validated) { 
     $this->validate(); 
    } 
    return $this->amount; 
} 
public function validate() { 
    $this->validated = true; 
} 
0

は、私は、カスタムセッターとゲッターと考えます。..あなたがそれらを設定する前に、あなたはすべての値を検証することができ

サンプル

class Balance{ 

     private $amount ; 
     private $date ; 
     private $count = 0 ; 

     function __construct ($amount , $date) 
     { 
      $this->setAmount($amount); 
      $this->setDate($date); 

      // Do somthign to count 
      $this->count++; 
     } 


     function getAmount() 
     { 
      return $this->amount ; 
     } 

     function getDate() 
     { 
      return $this->date ; 
     } 

     function setAmount ($amount) 
     { 
      //validate Amount 
      $this->amount = $amount ; 
     } 

     function setDate($date) 
     { 
      //validate date 
      $this->date = $date ; 
     } 

     function getCount() 
     { 
      return $this->count ; 
     } 
    } 



    $balance = new Balance(2500,date("Y-n-d",time())); 
    echo $balance->getAmount() , " " , $balance->getDate(); 

私は、これは(i'amは言っていない

おかげ

:)

0

これが私の解決策であるが役に立てば幸いそれは最高のものです):

Class getBalance(){ 

    private $isValid = false; 

    public __construct() { 
    //do validation 
     if validation pass 
      $this->isValid = true; 
     else 
     $this->isValid = false; 
    } 

    function getAmount(){ 
     if($isValid) { 
      var amount = obeject->amount; 
      return amount; 
     } 
     else 
      return "object not valid"; 
    } 

    function getDate(){ 
     var amount = obeject->date; 
     return date; 
    } 

    function getCount(){ 
     var amount = obeject->count; 
     return count; 
    } 
} 

いくつかのコメント: 私は、オブジェクトが構築時の検証に合格した場合(コンストラクタでそうVALIDATE)私に語った変数isValidを保つ

それぞれの方法あなたが

をしたい場合はisValidが真か偽であるかどうかチェックを返す前に
関連する問題