0

私のモデルでは通常、少なくとも 2 つの「get」ルーチン$model->get_one()があり、私のモデルは多くの場合、 db レコード バージョンを処理する を$model->get_where()拡張し、 のようなルーチンを持ちます。version_modelget_record_history()

これらのルーチンはすべて、同じデータベース フィールドを選択し、同じテーブル結合を行います。したがって、結合を DRY にするために、各モデルでルーチンを定義し、それを上記の他のモデル$model->create_joins()で使用します。$model->get()

フィールド選択もDRYにするために追加$model->select_fields()することも考えていますが、ここに投稿して、他の人がこれをどのように処理するか、またはより良い方法があるかどうかを確認すると思いましたか?

編集:質問:私のモデルで異なる基準で同じデータを選択するルーチンでテーブル結合を繰り返さないために、上記の方法よりも優れた方法はありますか? これは PDO のようなライブラリが処理するものですか?

4

2 に答える 2

1

これについては、 Martin Fowler によって導入され、Don Roberts に起因するRule of threeと呼ばれる経験則があります。ウィキペディアから:

コードは 1 回コピーできますが、同じコードが 3 回複製された場合は、新しい手順に抽出する必要があると記載されています。

DRY の原則を適用し、見つけられるものすべてを抽象化すると、簡単に迷子になり、アプリケーションが複雑になりすぎます。

DRY を適用するために抽象化を行う場合、費用対効果の比率を考えるとよいでしょう。

一般的なロジックを抽象化するには時間がかかり、コードがより複雑になります (ある意味で)。しかし、その結果、よりクリーンなコードが得られます。

メンテナンスを必要としない簡単な修正に取り組んでいる場合は、それをコピーして貼り付けるだけで済みます。しかし、メンテナンスが必要な複雑なアプリケーションを構築している場合は、必要な抽象化を行うようにしてください。これにより、おそらく将来的により多くの時間を節約できます。

さらに読むには:

あなたはそれを必要としません。

キスの原則。

于 2012-04-04T16:13:49.980 に答える
0

DRYもデザイン用ですが、モデルはバージョン管理を気にするクラスから拡張される場合があると書いています。

おそらく、永続性とバージョン管理を扱うモデルからすべてを移動する必要があります。そうすれば、それを処理できる他のオブジェクトを作成できるため、コードはより DRY になります。

于 2012-04-04T16:10:45.167 に答える