私は、ビジネスロジックとデータレイヤーを分離するためにphpクラスを設計する方法についてオンラインでヘルプを探していました。私はかなりクールだと思ったクラスの設計を始めましたが、その後PDOとADODBを発見し、ホイールを再現していることに気付いた素晴らしい瞬間を過ごしました。今の私の問題は、ロジックとすべてのSQLクエリを分離する方法をまだ完全に理解していないことです。
私はDBスキーマからほとんどすべてを取り除き、これら2つのテーブルを配置しました。これは、それらが非常に理解しやすいと思うからです。サーバーに保存されているパスがディレクトリにあるファイルがあるとします(これらのディレクトリは他のディレクトリにある可能性があります)。ファイルの1つからルートディレクトリを取得したり、現在のディレクトリ内のディレクトリのリストを取得したりするなどの基本的な機能が必要だとします。
+--------------------+ +----------------+
| Files | | Directories |
+--------------------+ +----------------+
| id | | id |
| name | | name |
| path | | directory_id |
| directory_id | +----------------+
+--------------------+
適切に設計されたクラスは次のようになりますか?
class Files {
public function __construct( $file_id ) {}
public function getDirectory() {}
public function getRootDirectory() {}
public function getPath() {}
public function move( $directory_id ) {}
}
class Directories {
public function __construct( $directory_id ) {}
public function getRootDirectory() {}
public function move( $directory_id ) {}
public function listContent() {}
}
コンストラクターを介して渡されたIDを使用して、コンストラクター内のオブジェクトのすべてのデータをどこでフェッチしますか?コンストラクターでもPDOオブジェクトを渡す必要がありますか、それともいくつかの貴重なデザインパターンがありませんか?すべてのSQLをここにハードコーディングする必要がありますか?PDOで得られることの1つは、MySQLからMSSQLに非常に簡単に切り替えることができるということですが、どちらもSQLの構文に違いがあるため、問題は発生しませんか?
これらは1つの良い答えがない、より理論的な質問であることは知っていますが、これについて話し合う同僚が不足しているため(デザインパターンが何であるかさえ知らないと言っても冗談ではありません)、Webに目を向けています。私の質問が曖昧すぎる場合は、この種の質問をすることができる良いディスカッションタイプの場所を自由に提案してください。私は非常に感謝しています:)