0

さまざまな機能を備えた製品の製品ラインがいくつかあります。私は各製品について作成した図面のリストを持っています。以下は、製品ライン、製品、および機能が図面で表されているもののサンプルです。

ここに画像の説明を入力

すべての機能を備えた特定の製品 (つまり、表の 1 行) が与えられた場合、機能を中心にコードを構成し、正しい図面を選択するための最も効率的で簡潔な方法を見つけようとしています。

私はいつでも次のようなことができます

if ($product == "A" 
    && $motor == true
    && $feet == 3 
    && $outlet == true
    && $manual == false) 
    getDrawing("A_motor_3_outlet_no_manual.jpg");

テーブル内の行と同じ数のフラットな if ステートメントで終わります。しかし、もっと良い方法があるはずです。カーディナリティ、または製品の各プロパティのオプションの可変性と関係があると思います。正確な概念は、何らかの理由で私を逃れます。

例えばモーターが付いているかどうかを最初に確認した方が、選択肢の約半分をなくすことができ、絞り込みが早くなるということを知ったほうがよいような気がします。つまり、メインの外側の if ブロックで次のようなことを行います。

if ($motor == true) 
{
   //7 drawings left to check
}
else
{
   //6 drawings left to consider
}

このようなものとは対照的に:

if ($feet == 1) 
{
   //still 10 rows left to consider
}
else if ($feet == 2)
{
   //just 2 options left to check
}
else if ($feet == 3)
{
    //one option only left:
    getDrawing("B_motor_3_no_outlet_manual.jpg");
}

しかし、おそらく私はこれを考えすぎて、何らかの形ですべてのプロパティを備えたルックアップテーブルが必要なだけです。

getDrawing($lookup[$product][$motor][$feet][$outlet][$manual]);

ルックアップ テーブルに使用するのに最適なプロパティの順序と、それが重要かどうかについては、依然として疑問が残ります。

質問:

製品のプロパティを決定するための「最適な」if-then-else ブロックの入れ子順序はありますか、コード全体で行う必要がある決定の総数を最小限に抑えますか、それとも一連の思考を放棄してルックアップ テーブルのみを使用する必要がありますか? ? なぜですか、そうでないのですか?

EDIT:ちなみに..これはデータベースを使用するのに適した候補のように見えます..しかし、合計48行しかなく、コードに直接エンコードできます。これは読み取り専用で、それほど頻繁には更新されないため、多次元配列を使用してこのデータをエンコードすることを考えています。

4

2 に答える 2

0

データを図面ファイル名にエンコードするだけです。最初のifステートメントで行った方法とまったく同じです。例えば:

$filename = $product."_".$feet."_".($outlet ? "true":"false")."_".($manual ? "manual":"no_manual")."jpg";
if (!file_exists($filename)) $filename = "missing.jpg";

これにより、すべての問題が外部に保持され、コードが単純化されます。

于 2014-10-02T21:29:07.067 に答える