フレームワークのDB部分

2018-06-30 04:58:17

 Web系フレームワークではDBの抽象化によって、複数の種類のデータベースに簡単に対応できるようになっています。PHPの一般的な手法では、PDOなどで接続部分まで行程は抽象化されていますが、SQL文までは無理です。

‌ ということでフレームワークを作るに当たって、PHPでDB周りを抽象化するべきかどうか考えてみます。ORMを(ObjectRelationalMapping)を使うかどうかです。これを使えば、SQL文を書く必要がありません。

‌ ORMを使った場合、単純なデータの取り回しが楽になります。しかし複数テーブルにまたがるようなデータや、結合条件に多少の注文を付けると、一気に使い勝手が悪くなります。

‌ 私の結論は以下のような感じです。

‌ ・単純なデータ専用のAPIは用意するべき
‌ ・メイン部分は普通にSQL文を書く
‌ ・プログラム上にSQLが飛び散ると、便器の小便ハネのように悪臭の元になるため、一定の箇所に集中して書く

 DBを抽象化するのもいいのですが、DBの性能をフルに発揮させるためにはやはり専用コードを書くべきです。

‌ 私は開発にSQLiteとPostgreSQLを使うことが多いですが、そこで比較的近年実装された機能を使ってしまっています。せっかく機能が増えたのに、使わないのはもったいないです。

‌ VPSが低コストでボコボコ立てられる時代、旧システムは置き去りにして、新しい環境をどんどん作ってしまえば良いのです。

‌ また、規模が大きくなった時のために、DBのレプリケーションの構造をどうするか考慮する必要があります。そこまで考えた場合、もはやDBの種類を抽象化しようという気力は起こりません。ロジカルレプリケーション対応のDB以外を選択すると茨の道です。