データベース内のテーブルごとに個別のクラスを持つデータ アクセス レイヤーがあります。各クラスは、テーブル内の行を参照するオブジェクトを作成し、作成、更新、削除、およびフェッチ機能を備えています。それらはすべて DBObj クラスを拡張します。私の質問は、クエリを に書きたいと言ってSELECT * FROM table
、それを関数に入れたいということです。これはどこに置くのがベストですか?ビジネス層または関連するすべての機能をそれぞれのデータ層クラスにグループ化しますか? それが重要な場合は、PHPでMySQLを使用します。
2 に答える
SQL クエリをデータ層に配置します。
のようなクエリの場合SELECT * FROM table
、それをモデル自体のクラス メソッドにするか、モデル マネージャー オブジェクトのメソッドにするかは、スタイルの問題です。
ただし、ビジネス ロジックは、データベース スキーマの任意の詳細から抽象化する必要があります。ビジネス層は、そのデータを取得するために使用される特定のクエリを気にせずに、モデルのすべてのインスタンスについてデータ層に問い合わせることができる必要があります。
私はあなたの質問を見つけたところです、そして私は別の視点をもたらすことを考えました。ほとんどのアプリケーションでは(すべてを言うわけではありませんが、それに近いです)、データ抽象化レイヤーを構築する必要があります。ほとんどの場合、ORMフレームワークとして定義されています。
ただし、アーキテクチャのアプローチに応じて、データアクセス層(DAL)をドメイン層またはビジネスロジック層と混同しないように注意してください。このテーマをさらに深く知りたい場合は、すべての開発者がマーティン・ファウラーの記事を探す必要があると思います。また、M。ファウラーほど重要ではない、私がしばらく前に行ったこのブログ投稿を読むこともできますが、私は問題に関するいくつかの考察。
よろしく、デビッド