現在、railsでアプリケーションを開発しながら勉強をしているのですが、
MVCモデルを使って開発をしていて、V=View「わかる( ´∀`)」要は画面の表示をするフロントの部分だ。
C=Controller「わかる( ´∀`)」routeファイルに書いたモデルの対応したアクション(メソッド)で処理内容が違うし、表示させるファイルを呼び出したり、リダレクトしたり、呼び出すモデルが違ったり対応するアクション(メソッド)によって
行う処理が全く違う。
ではモデルとは???
モデルのファイルにはbelongs_toやhas_manyなどのモデルの結びつきなどが記載されています。
よくググるとデータベースとデータのやりとりを行う機能を実装したりする。など記載されていますが
なんのこっちゃよく分からん( ゚д゚)
なので、自分なりにモデルとはこういうものだよと解説していきます。
モデルの概念
モデルとは日本語で、型や模型を意味しています。
この型とは?なんの型なのでしょうか?何を意味しているのでしょうか?
例えば「User」モデルがあるとします。Userとは使用者、使い手などを意味します。
この「User」とはどんなものなのでしょうか?
まず使用者と言うぐらいだから「名前」くらいはあると思います。
次に「年齢」、「住所」は持っていると過程します。
この「User」モデルは今、「名前」「年齢」「住所」というプロパティを持っています。
プロパティとは、その対象に対象にくっついている、そいつがどんなやつかを表す情報を意味しています。
(プロパティ・属性、特性を意味する)
つまり「User」がどんなものか表す情報をプロパティ(属性)といいます。
では、表す元となる「User」は何と言うのでしょうか?
これはエンティティ(概念)と呼びます。
このことからこんな形になります。
model(情報) = 「エンティティ(概念)」
modelの情報内容 = 「プロパティ(属性)」
みじかなものだと
ニュース(情報) = 「エンティティ(概念)」
ニュース内容 = 「プロパティ(属性)」
なのでmodelとは現実世界の物体をプログラムなどのデータ世界に概念化した形だと
思えばいいのかなと思います。
概念とは
以下wikiから抜粋
概念は、命題の要素となる項が表すもの、あるいは意味づけられたものであり、
言い換えれば、それが言語で表現された場合に名辞となるもの。
人が認知した事象に対して、抽象化・ 普遍化し、思考の基礎となる基本的な形態となるように、
思考作用によって意味づけられたもの。
小難しく書いてますが、自分たち人が認知した物に対して思った事を意味づける事です。
例えば空飛ぶ物体とは何?と思ったら飛行機などを思い浮かべるとおもいます。
では、飛行機とはどんな物?と思ったら、翼があるエンジンがあるなどがあげられると思います。
つまり、人が認識しているものに対して抽象的なものが概念を意味しています。
railsのモデルとは
railsではモデルを作成するとmigrateファイルが作成されます。
このmigrateには、モデルのもつ情報内容(プロパティ)を記述し、
データベースへ反映させます。
つまり、モデルが情報(エンティティ)、migrateファイルに記述した物がモデルの情報内容(プロパティ)になります。
簡潔に表すと
Userモデルを作成 User.rb(エンティティ)
class User < ApplicationRecord
has_many :comments
validates :nickname, presence: true, length: { maximum:6 }
Userモデルの情報内容は、 モデル作成時のmigrateファイルに記述(プロパティ)
class CreateUsers < ActiveRecord::Migration[5.2]
def change
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
t.datetime :remember_created_at
注)なぜモデルファイルとmigrateファイルが別れていて結び付くのかかなりラップされているので、私でうまく言語化して説明できないので割愛させていただきます。
javaのモデルとは
モデルクラスが情報(エンティティ)にあたり、クラス内のメンバ変数が情報内容(プロパティ)になります。
class Human{ //エンティティ
string name;//プロパティ
int age;//プロパティ
void setName(string aName) {
// 自分のクラスのメンバー変数へのアクセス
name = aName;
}
int getName() {
// 自分のクラスのメンバー変数へのアクセス
return name;
}
void setAge(string bAge) {
// 自分のクラスのメンバー変数へのアクセス
age = bAge;
}
int getAge() {
// 自分のクラスのメンバー変数へのアクセス
return age;
}
}
結論モデルとは
情報(エンティティ)の大枠だと理解!!
情報(エンティティ)
├ 情報内容(プロパティ)
│ └ 情報内容の値(プロパティ値)
User(エンティティ)
├ name(プロパティ)
│ └ 山田太郎(プロパティ値)
├ age(プロパティ)
│ └ 19才(プロパティ値)