Open1

【DB設計・Entity設計】ORMとORMパターンについて

まさぴょんまさぴょん

ORMとは?

ORM(Object-Relational Mapping、オブジェクト・リレーショナル・マッピング)とは、オブジェクト指向プログラミングとリレーショナルデータベースの間でデータをやり取りするための技術または概念です。

これにより、開発者はデータベースのテーブルやSQL文を直接操作するのではなく、プログラム内のオブジェクトとしてデータを扱うことができます。

ORMの主な目的と利点:

  • 抽象化:データベースの構造をオブジェクトとして表現し、データベース操作を抽象化します。
  • 生産性向上:手作業でのSQLコーディングを減らし、開発効率を上げます。
  • 保守性:コードの一貫性と可読性を高め、保守を容易にします。

ORMパターンとは?

ORMパターンは、オブジェクトとリレーショナルデータベースの間のマッピングを効果的に行うための設計パターンやベストプラクティスの集合です。

代表的なパターンには次のようなものがあります👀✨

1. アクティブレコードパターン(Active Record Pattern)

  • 各テーブルに対応するクラスを作成し、そのクラスがデータベース操作(CRUD操作)を自身で行います。
  • 利点:シンプルで理解しやすい。
  • 欠点:ビジネスロジックとデータアクセスロジックが混在する可能性があります。

2. データマッパーパターン(Data Mapper Pattern)

  • ドメインオブジェクトとデータベースの間のマッピングを専門とするマッパークラスを使用します。
  • 利点:ビジネスロジックとデータアクセスロジックを分離できます。
  • 欠点:実装が複雑になる場合があります。

3. リポジトリパターン(Repository Pattern):

- ドメインオブジェクトへのアクセスを抽象化し、データの取得や保存を統一的なインターフェースで提供します。
    - これにより、データアクセスの詳細を隠蔽し、ビジネスロジックから独立させることができます。 
  • 利点:コードの再利用性向上, 保守性と拡張性の向上, テストの容易性, コードの可読性向上
  • 欠点:実装の複雑化, 小規模プロジェクトでのオーバーヘッド, パフォーマンスへの影響

4. ユニットオブワークパターン(Unit of Work Pattern)

  • 一連のデータベース操作を一つのトランザクションとして扱い、一貫性を保ちます。
  • 利点:データの整合性を確保できます。
  • 欠点:大規模なデータ操作ではパフォーマンスに影響する可能性があります。

5. レイジーローディング

  • 必要になるまで関連データをロードしないことで、初期のデータ取得を高速化します。
  • 利点:パフォーマンスの最適化。
  • 欠点:遅延読み込みによる予期せぬデータベースアクセスが発生する可能性があります。

6. レイジーローディング(Lazy Loading)

  • データベースから取得したデータをメモリ内にキャッシュし、再利用性を高めます。
  • 利点:データベースアクセス回数を減らし、性能を向上させます。
  • 欠点:メモリ消費が増加する可能性があります。

これらのパターンを適切に組み合わせることで、ORMを使用したアプリケーションの性能や保守性を大幅に向上させることができます。

参考・引用

https://qiita.com/labyu2020/items/8d375aa8599e94416ac1

https://zenn.dev/yum3/articles/t_orm_kinds_research

https://zenn.dev/kohii/articles/e4f325ed011db8