sql
sql webフレームワークの仕組みの「アクティブレコード」がモデルと同じものであると考えた場合、「複数のテーブルを組み合わせてselectする場合」これに対応できなくなる可能性が高いです。

アクティブレコードの正しい使い方

## MVCのM(モデル)を単純化する
ソフトウェア開発の80%は知的作業であり、そのほとんどが創造的な作業です。 この知的作業を支援してくれるのが、デザインパターンなどの規約です。 Singleton、Facade、Factoryなどのパターン名を使うことで、チームのメンバーにデザインの意図を伝えることができます。 WEBアプリケーションフレームワークを使うと、さらに迅速かつ簡単にコードを書いてアプリケーションに機能を追加できます。 ほとんどのWEBアプリケーションフレームワークは、MVCモデルです。 MVC(モデル・ビュー・コントローラ)アーキテクチャは、デザインパターンとソフトウェアフレームワークの両方が関わります。 MVCモデルはその名前の通り、Model、View、Controlの三つの要素から構成されます。 それぞれの説明は以下の通りです。 - コントローラー ユーザーの入力を受け入れ、入力に対してアプリケーションが何を返すべきかを定義し、モデルに仕事をさせた後、ビューを呼び出して表示します。 - ビュー ユーザーインターフェースに情報を表示します。 - モデル 他の全てを行います。(一般的にデータと同じ部分です。) コントローラー、ビューの役割は非常に明確なのに対して、モデルの役割は曖昧です。
## アクティブレコードとは?
アクティブレコードとは、ほとんどのweb開発フレームワークで使われるデザインパターンの一種となります。 2004年にRuby on railsで使用されて以来、広く使われるようになりました。 web開発フレームワークにおいては、特にシンプルなアプリケーションではモデルを複雑にカスタムする必要はありません。 アクティブレコードが、以下の手順でオブジェクトに必要な操作は(テーブルでの行の作成、変更、削除、参照)を行います。基本的なCRUD操作と呼ばれます。 1. データベースのテーブルやビューに対するクラスを定義する 2. クラスメソッドfindを呼び出すことで、そのテーブルやビューの各業に対応したインスタンスが返される。 3. クラスのコンストラクタを用いて新しい行を生成される アクティブレコードは、単一テーブルの各業に対するシンプルなインターフェースを提供してくれる、優れたパターンです。 しかし開発者は曖昧さを嫌い、極度に抽象化、シンプルさを保とうとしてしまい、モデルを単なるデータアクセスオブジェクトとみなしてしまうことがあります。
## アクティブレコードの間違った使い方:MVCのモデルとアクティブレコードを同一にしすぎてしまう
アクティブレコードを突き詰めようとするあまり、「SQLを発行するという行為」をやめてしまうことがあります。 特に、**webフレームワークの仕組みの「アクティブレコード」がモデルと同じものであると考えた場合、「複数のテーブルを組み合わせてselectする場合」これに対応できなくなる可能性が高いです。** なぜなら、webフレームワークにおける「アクティブレコード」とはデータベースのテーブルやビューなどの粒度で構成されるためです。 https://speakerdeck.com/minodriven/railsdekao-erudomeinqu-dong-she-ji-falsekoadomein
### 解決策:モデルとアクティブレコードの関係は「is-a」ではなく、「has-a」である
モデルについての万能な解決策を提供することはこんなんです。 なぜなら、モデルはアプリケーションのViewとControl以外の残りの全てを構成する要素だからです。 そのため、**そもそもwebフレームワークにある「アクティブレコード」の仕組みだけでモデルを構築することが誤解なのです。** *アクティブレコードのようなDAO*と*モデル*の関係は、is-a(継承)ではなくhas-a(集約)の関係であるべきです。 モデルがDAOクラスからの継承ではなくDAOを使う関係にある場合、**対象となるドメインの全てのデータを含むようなモデルを設計**できます。
### ドメインモデルの使用
エリック・エヴァンスは「ドメイン駆動設計」の著作の中で、**ドメインモデル**と呼ばれる設計手法を提唱しています。 それはすなわち - アプリケーションはビジネスルールのために存在する - データはビジネスルールのために存在する という考え方です。 つまり、**モデルとはアプリケーションのビジネスロジックを実装する場所であり、そのためにアクティブレコードを使い倒すという考え方です。** データベースとのやりとりは、モデルの内部の実装の詳細なのです。 https://speakerdeck.com/minodriven/railsdekao-erudomeinqu-dong-she-ji-falsekoadomein
## アクティブレコードの正しい使い方
title:アクティブレコードの正しい使い方 description:webフレームワークの仕組みの「アクティブレコード」がモデルと同じものであると考えた場合、「複数のテーブルを組み合わせてselectする場合」これに対応できなくなる可能性が高いです。 category_script:page_name.startswith("30")