私はここ数ヶ月 Yii をいじっていますが、コードを Yii のように構造化するために、モデルを他のモデルのリストにするのに最適な方法を考えていました。
Yii は概念的に DAO に非常に近いモデルを持っているようですが、MVC の設計では非 DAO モデルをモデル以外の場所に置かないようにしています。(私は MVC の専門家ではありません)
2 つの理由、リストが優れている:
- リレーションで取り組むことができないかなりの量のロジックを持つオブジェクトがある場合に拡張するCModelListのようなものを探しています(とにかくCActiveRecord要素です)
- 型としてのリストは、要素にロジックを適用できますが、それらすべてを一度にメモリにロードする必要はなく、ID を使用してコード全体で操作できる単一の型を提供し、サブセットのみをロードします。
問題を解決していないように見えるもの
- Relational Active Record : すべてのモデルがアクティブ レコードであるとは限らないため
- CAttributeCollection : 配列のようなメモリ内のすべてのオブジェクトのみをサポートするため
- getRestaurantsAverageRatingByPriceRange などの異なるモデル内の同じメソッド: モデルがより多くのメソッドを持っているため、OOP 内の関数型プログラミングが急速に成長しているためです。
例 1
$user = User::model()->findByPk($userID); // get a user
$restaurantList = $user->getRestaurants(); // get restaurants for that user
for($i=0;$i<5;$i++) {
$this->renderPartial( "rating",
array("rating" => $restaurantList->getAverageRatingByPriceRange( $i ) );
}
例 2 (同じリスト ロジック、異なる基本モデル)
$city = City::model()->findByPk($cityID); // get a city
$restaurantList = $city->getRestaurants(); // get restaurants for that city
for($i=0;$i<5;$i++) {
$this->renderPartial( "rating",
array("rating" => $restaurantList->getAverageRatingByPriceRange( $i ) );
}
例 3 (同じリスト タイプと基本モデル、異なるロジック)
$user = User::model()->findByPk($userID); // get a user
$restaurantList = $user->getRestaurants(); // get restaurants for that user
$this->renderPartial( "map",
array("coord" => $restaurantList->getCoordinatesMap() );
Yii にはそれが欠けているのでしょうか、別の考え方を始めるべきでしょうか、それともクリーンなコードと構造を使用して維持するためのメカニズムは何ですか?