5

ユーザーの処理に役立つクラスがあります。例えば:

$user = new User("login","passw");
$name = $user->getName();
$surname = $user->getSurname();
$table = $user->showStats();

これらすべてのメソッドには、SQLクエリが含まれています。一部のアクションは1つのSQLクエリのみを必要とし、一部は複数です。データベース構造が変更された場合、すべてのクエリを変更することは困難になります(クラスが長い)。そのため、SQLクエリをこのクラスから遠ざけることを考えました。しかし、これを行う方法は?

この質問を読んだ後、私はストアドプロシージャについて知っています。これは、1つのアクションに必要なSQLクエリ(ストアドプロシージャの呼び出し)が1つだけであることを意味しますか?しかし、phpから分離SQLを整理する方法は?SQLクエリを配列に保持する必要がありますか?または、sql-queriesクラスである必要があります。はいの場合、このクラスを編成する方法(多分私が学ぶべきパターン)

4

4 に答える 4

5

これは驚くほど大きなトピックですが、途中で役立ついくつかの提案があります。

オブジェクトがSQLクエリを自動的に生成するオブジェクトリレーショナルマッピングを調べる必要があります。概要については、オブジェクトリレーショナルマッピングアクティブレコードの記事を参照してください。これにより、データベースコードが最小限に抑えられ、テーブル構造が変更された場合でも簡単になります。

しかし、ここには特効薬はありません。スキーマが変更された場合は、それに合わせてクエリを変更する必要があります。一部の人々は、データベースビューとストアドプロシージャ内にクエリロジックをカプセル化することによってこれに対処することを好みます。一貫性がある場合、これも良いアプローチですが、ストアドプロシージャの作成を開始すると、使用している特定のデータベースに大きく結びつくことに注意してください。それらを使用することに何の問題もありませんが、データベースを将来的に切り替えることがはるかに困難になります。通常は問題ではありませんが、覚えておくべき重要な側面です。

とにかく、どの方法を選択する場合でも、データベースロジックをいくつかの「モデル」クラスに格納することをお勧めします。あなたはすでにこれに似た何かをしているようです。基本的な考え方は、各モデルがデータベースの特定の領域のロジックをカプセル化することです。従来、各モデルはDB内の単一のテーブルにマップされていました。これがRubyonRailsアクティブレコードクラスの動作方法です。これは、データベースロジックを単純な小さな「チャンク」に分解するため、優れた戦略です。すべてのデータベースクエリロジックを1つのファイル内に保持すると、すぐに制御不能になり、メンテナンスの悪夢になる可能性があります。信頼してください。

「全体像」をよりよく理解するために、Web Model-View-Controller(MVC)アーキテクチャーをじっくりと読んでおくことをお勧めします。また、 CodeIgniterKohahaCakePHPなどの確立されたPHP MVCフレームワークも確認する必要があります。使用しない場合でも、使用することをお勧めしますが、これらのフレームワークがコードをどのように編成するかを確認すると役立ちます。

于 2011-05-08T12:25:43.210 に答える
2

コードに「リポジトリ」デザインパターンを実装することを検討する必要があると思います。

これを実装する方法に対する良い答えは、このスペースには長すぎるので、PHP指向のリファレンスをいくつか投稿します。

travisswicegood-PHPのリポジトリパターン

JonLebensold-PHPのリポジトリパターン

于 2011-05-08T12:14:03.037 に答える
1

関心の分離を使用してビジネスロジックをデータアクセスロジックから分離する場合、あなたは正しい方向に進んでいます。

于 2011-05-08T12:05:54.040 に答える
1

「すでに2K行のコードがあります」というステートメントから判断すると、何かを維持しているか、何かを開発している途中です。

FaustとJustinEthierはどちらも、優れた推奨事項を示しています。「データベースアクセスをアプリケーションコードから分離する方法」は、Web開発で最も古く、最も回答の多い質問の1つです。

個人的には、MVCが好きです。MVCはWeb開発のデフォルトのパラダイムであり、保守性と生産性のバランスが取れており、実行中にサポートするフレームワークがたくさんあります。

もちろん、アプリを最初から書き直すのは大変な作業だと判断するかもしれません。その場合、リポジトリパターンは中途半端なものです。

いずれにせよ、リファクタリングについて読む必要があります。現在の場所から目的の場所に移動するのは難しいでしょう。スターターとして、ファウラーの本をお勧めします。

データベーススキーマが変更される理由について詳しく説明してください。これは通常、先の問題の兆候です。

于 2011-05-08T12:56:56.483 に答える