web-dev-qa-db-ja.com

PHP

アプリケーション用のデータベースクラスを作成する必要があるのか​​、もしそうなら、それをどのように実現するのか?

SOのあちこちで、ある人はそれを抽象クラスとして書くべきだと述べました。しかし、なぜこれがメリットになるのか理解できません。

抽象クラスを作成する場合、メソッドがデータベース接続を必要とする他のすべてのクラスは、この抽象クラスを拡張して独自のデータベースオブジェクトを持つことができることを正しく理解していますか?もしそうなら、これは、データベースオブジェクトをインスタンス化できる「通常の」クラスとどう違うのですか?

別の方法は、自分のクラスを完全に忘れて、オンデマンドでmysqliオブジェクトをインスタンス化することです。

何がお勧めですか?

3
Wottensprels

はい、クラスにアクセスしてデータベースにアクセスする必要があります。それについてさらに読むための良いリンクは、 アクティブレコードデザインパターンオブジェクトリレーショナルマッピング を調べることです。

この利点は、DRY原理と 以前に尋ねられたデメテルの法則 で確認できます。抽象データアクセスクラスを作成することで、アプリケーションのデータアクセスレイヤーの一部がモデル/データベースエンティティクラスに漏洩するのを防ぎ、新しいデータベースモデル/エンティティを作成するたびに繰り返す必要がなくなります。

さて、あなたの質問に戻ります。データベースエンティティのCRUDを処理する抽象クラスを作成します。そのため、抽象クラスを拡張し、新しいエンティティをデータベース。これにより、テーブルのSQLを作成する際の煩わしさが軽減され、抽象クラスにすべて移動することで処理がはるかに簡単になるだけでなく、特に膨大な数のモデルやデータベースエンティティがある場合は、アプリケーションのデータアクセスレイヤーを管理しやすくなります。

では、抽象クラスを作成することと、データベースモデルクラスを作成してからデータベース接続でインスタンス化することの違いは何でしょうか。それともmysqliをそのまま使用するのですか?

  1. 抽象クラスを使用すると、アプリケーションのデータアクセス層を1回だけコーディングする必要があります。
  2. 冗長なデータベースの初期化を排除することで、コードは [〜#〜] dry [〜#〜] になります
  3. 保守性が向上し、データベースへのアクセス方法を変更するには、コードの一部を変更するだけで済みます。
  4. SQL嫌い者は大喜びです! ORMを処理するときに、SQLステートメントに直接直接タッチする必要はありません。

しかし、私たちはプログラマーなので、これをゼロから再構築しないことをお勧めします。彼らが言うようにホイールを再発明する必要はありません。 ORMをエレガントに処理するPHPのフレームワークはすでに存在しています。あなたは人気のある [〜#〜] mvc [〜#〜] PHPのフレームワークを YiiKohana のように検索できます。

5
Maru

これは link があなたの質問にある程度答えると信じています。 OOPアプローチを使用し、うまく説明しています。ここにリンクからの簡単なスケルトンがあります: `

class Database  
{  
    public function connect()   {   }  
    public function disconnect()    {   }  
    public function select()        {   }  
    public function insert()        {   }  
    public function delete()        {   }  
    public function update()    {   }  
}  `
0
score