1

これは、私が開発するたびに私を悩ませている長期にわたる質問です。

CodeIgniter に固有のものではないと思いますが、私はそれを使用しているので、私の例で検討します。

まず、どちらが良いですか:

function add_entry($data_array)
{
    //code to add entry
}

function edit_entry($data_array)
{
    //code to update entry
}

また

function save_changes($what,$data_array)
{
    //if what == update update
    //otherwise insert
}

どちらも同じアクションを生成しますが、どちらを使用するかは本当に重要ですか?

より複雑なことに取り掛かる。

データベースから 1 つのエントリを取得する必要があるページがあります。

ユーザー指定の列で並べ替えられた同じデータベースからすべてのエントリを取得する必要があるページもあります。

私の結果のメソッドは、次のような関数です

function($data_array,$order_by='',$limit='')
{
    //get where $data_array
    //if order_by!='' add order by 
    //if limit !='' add limit
}

アプリケーションを開発し、「同様の」データベース機能が必要な新しい場所に気付くと、以前の方法をハッキングしたような気がして、すべてのケース シナリオで機能します。メソッドには多くの条件ステートメントが含まれ、場合によっては 4 つまたは 5 つの入力パラメーターで非常に複雑になります。

ポイントを逃しましたか?私は重複したコードを望んでいません。また、大部分の機能が非常に似ている場合、この「ハッキング」方法論が最もうまく機能するように感じます。

誰かがアドバイスできますか?

最後に、私の管理機能は、管理コントローラー内の同じアプリケーションの一部です。管理データベースとのやり取りのための特定のメソッドを含む管理モデルがあります。ただし、「ユーザー」モデルのモデル機能をいくつか使用しています。

たとえば、管理ページでデータベースエントリの詳細を取得する必要がある場合、ユーザーモデルをロードしてこの機能にアクセスできます。これについて間違っている/安全でないことは何もありません..? 右?

管理モデル自体に加えて、ユーザー データベース エントリに関するデータを取得する必要があるため、管理モデルから直接ユーザー モデルを呼び出します。これは厳密には問題ありませんが、なぜですか? データが必要で、それを取得するユーザー モデルに既にメソッドがある場合..管理モデルのコードを書き直すのは少し無意味に思えますが、その関数が呼び出されるたびに、ユーザー モデル全体が再度読み込まれますか?

どうもありがとうございました。

4

1 に答える 1

1

順番に、モデルに編集を追加して保存します。個人的には、渡されるデータの主キーの存在に応じて保存か編集かを選択する MY_Model に保存が組み込まれているため、使用できるため、コードの重複がはるかに少ないことを意味するその方法を明らかに好みますモデルに関数をまったく持たないテーブルの保存。

2番目の質問については、状況によると思います。また、使用される場所と目的に応じて、大量の条件付き関数が多数あります。場合によっては、これによりコードの読みやすさが少し荒くなることがあります。if ステートメントをすべて実行している場合、パフォーマンスに影響を与える可能性もあります。DRY は概念であり、ルールではありません。他の設計概念と同様に、意味をなさない場合もあります。データベースの正規化のようなものです。私の個人的な意見ですが、データベースを過度に正規化し、パフォーマンスと使いやすさを損なうのは非常に簡単です。

最後に、管理コードでユーザー関数を使用します。ここではまったく問題は見られません。おそらくその逆は当てはまりませんが、ユーザー関数と同じ場合に、「管理者」関数であるという理由だけで関数を書き直すことはまったく無意味です。おっしゃる通り、時間とスペースの無駄です。

于 2013-04-08T12:01:09.430 に答える