4

コードイグナイターを使用しています。

私はなどのようないくつかのメソッドを持つクラス Orders を持っていstart_order(), close_order(),ます..

そして、ユーザータイプごとに許可レベルがあります'admin','salesman','manager' ..

したがって、同じメソッドが毎回異なる実装になる場合があります。

だから、私の質問は次のとおりです:これはCIのベストプラクティスと見なされます:

1)さまざまなロジックの詳細を含む「注文」クラスで大きなメソッドを作成します。または
2)他のクラスで必要に応じてメソッドを繰り返します。

最初の選択肢を選ぶべきなのは明らかだと思います。しかし、私がそれをしたとき、大量のコードブロックになってしまいました。だから、これが私があなたの経験を求めている理由です。

4

5 に答える 5

7

実際のところ、最初の選択肢 (「1 つの大きな方法」) を選択する必要があるかどうかは明らかではありません。それは絶対に避けるべきです。

一般に、小さなメソッドを優先する必要があります。各メソッドは、1 つのことだけを実行する必要があります。変更する理由は 1 つだけにする必要があります。小さくて読みやすくする必要があります。その名前から何をしているのかが明らかである必要があります。

質問で選択した言葉遣い (「毎回異なる実装」および「異なるロジックの詳細を含む」) は、オブジェクトのある種の状態に基づいて異なることを行う 1 つのメソッドについて話していることを意味します。

Replace Conditional With Polymorphismと呼ばれるリファクタリング パターンを見てみましょう。caseこのパターンは、主に大きなチェックまたはif/elseifその状態を決定するチェーンであるメソッドがある場合によく使用されます。基本クラスのメソッドをオーバーライドする独自のクラスに各実装を抽出するという考え方です。クラスは状態を保持して認識し、それに応じて正しいロジックを適用することができ、消費するコードは基本クラスの型でメソッドを呼び出すだけです。

このパターンには多くの情報と多くの例があります。

@Gordonが指摘しているように、これは戦略パターンとも呼ばれます。

于 2012-04-30T16:04:37.490 に答える
3

許可レベルごとに異なるクラスがあると言っていますか ( AdminOrderSalesmanOrderなど)? その場合、順序が十分に異なる場合は、各クラスに個別のメソッドを追加することをお勧めします。これを行うことはメソッドのオーバーライドと呼ばれ、オブジェクト指向プログラミングでは一般的です。たとえば、次のようにします。

class Order
{
    function start_order() 
    {
        // this method contains common code for all orders
    }
}

class AdminOrder extends Order
{
    function start_order()
    {
        // IF NEEDED: call start_order on Order. This is if you have common code that should be executed for ALL subclasses of Order
        parent::start_order()

        // Now implement code specific to an AdminOrder
    }
}
于 2012-04-30T16:07:41.053 に答える
1

したがって、同じメソッドが毎回異なる実装になる可能性があります

このことから、実装ごとに 1 つずつ、合計 3 つのメソッドが必要であることがわかります。考えられるすべての実装を 1 つの大きなメソッドに混在させると、保守がはるかに難しくなります。if と else がたくさんあります。

戦略パターンを見て、これをうまく機能させる方法を学んでください。

于 2012-04-30T16:05:07.663 に答える
0

ベストプラクティスは、ロジックの大きなチャンクを個別のメソッドに分割することです。次に、必要に応じて呼び出します。

コードは見栄えが良く、読みやすく、何かを見つけて修復する必要があるときに迷子になることはありません。

巨大な巨大な方法は非常に悪い習慣です。

于 2012-04-30T16:09:18.717 に答える
0

order基本クラスを作成してから拡張するのが最善adminだと思います。salesmanその後は、異なるメソッドを上書きするだけで済みます

于 2012-04-30T16:05:25.693 に答える