プログラミング学習記録

PHPを中心に学習しています。学んだ事、つまずいた事、解決方法などを発信していきます!

MVCとは

ドメイン駆動設計(DDD)とは、2003年にエリック・エヴァンス氏が『Domain-driven design』という書籍にて提唱したソフトウェア開発手法 顧客と開発者が業務を戦略的に理解し、共通の言葉を用いてシステムを発展させていく設計手法

ドメイン ドメインとは対象とする事業が取り扱う世界を表しています。この世界には独自のルールと文化が存在しています。良い開発を行うためには、この世界をチームメンバーが深く理解する必要があります。しかし、すべての仕組みを理解するにはあまりにも大きく複雑すぎるため、通常は「コアドメイン」「サブドメイン」という適切な大きさに分割します。

エンティティ 一意なものを表現する概念です。一意であるため、長期にわたって変化できるオブジェクトとなります。

リポジトリリポジトリ」とはデータの「保管庫」を表します。ソースコードリポジトリであればGitやApache Subversionが有名ですが、DDDにおけるリポジトリは、エンティティや値オブジェクトから構成される集約の格納と取得を担当します。リポジトリは、クライアントへ集約を提供し、背後のデータベースとのやり取りを隠ぺいします。

 通常、集約とリポジトリの関係は一対一になります。例えば「注文」の集約を利用したい場合「注文リポジトリ」を使用します。クライアント側はリポジトリのおかげで、物理的な構成(RDBなのか、NoSQLなのか等)を意識せずに、簡単に集約を操作できます。

サービス DDDでは、エンティティ、値オブジェクト、集約といった「ドメインオブジェクト」だけではなく、それらの外に記述したほうがよいロジックも存在します。そのようなときに、状態を持たないステートレスな「サービス」を使用できます。サービスには、大きく分けて次の2つが存在します。

ドメインサービス:エンティティや値オブジェクトの責務ではないドメインモデルのロジック(複数のドメインオブジェクトを使って計算する処理やファサード) アプリケーションサービス(詳細は14章):非常に薄く、ドメインモデル上のタスクの調整に使うロジック(腐敗防止層の変換・アダプター等)

MVC(Model View Controller モデル・ビュー・コントローラ)は、アプリケーションを実装するためのデザインパターンです。 PHPフレームワークであるLaravelなどもMVCの概念を用いている

ルーティングも重要であるため、RMVCと覚えておくといい

routing:ユーザーのリクエスト URL controller: 入力(ユーザーのリクエスト)を受け取りmodelとviewへの命令に変換する model: アプリケーションデータ、ビジネスルール、ロジック、関数 view: グラフや図などの任意の情報表現 ユーザへの表示

レイヤアーキテクチャというのはアプリケーションを責務に応じたいくつかの層としてとらえる設計手法のことです。

ユーザインタフェース層 ユーザに情報を表示し、ユーザの入力を解釈する。MVCではV ・アプリケーション層 ドメイン層のオブジェクトを協調させる。ビジネスに関する知識を持たず、作業を調整するだけ。 MVCではC ・ドメイン層 いわゆるビジネスロジックを表現する。一番重要な層。MVCではM  ・Entity:業務(独自)データを保持するためのクラス(Entityクラス)を作成する。  ・Repository:業務(独自)データを操作するためのメソッドを実装し、Serviceクラスに提供する。業務データを操作するためのメソッドとは、具体的には、Entityオブジェクトに対するCRUD操作となる。  ・Service:業務(独自)ロジックを実行するためのメソッドを実装し、アプリケーション層に提供する。業務ロジック内で必要となる業務データは、Repositoryを介して、Entityオブジェクトとして取得する。 ・インフラ層 上位レイヤを支える一般的な技術。MySQLとかRedisとか。

レイヤーが分離できていないと、特定のレイヤーが肥大化してしまう Fat Model

ドメイン層のモデルはさらに分割する エンティティ

リポジトリ

サービス

PHPにおけるオブジェクト指向

staticとは

クラスを扱う際に意識する必要がある

sutaticキーワードとは、インスタンス化しなくても、クラスから直接呼び出せて使用できるメソッドやプロパティを定義する方法

インスタンス化しなくても良いので、クラス全体の属性として指定することができる

例:犬クラス static変数:イヌ科 インスタンス変数:name ポチ

class Dog{ public $name; public static $belong = "イヌ科"; }

$pochi = new dog(); $pochi->name = "ポチ"

echo Dog::$belong;

インスタンス変数、インスタンスメソッドと対極に位置するものがstatic変数、staticメソッド

参考にしたサイト

PHPオブジェクト指向入門(前半) - Qiita

PHP フォーム作成

PHPでフォーム作成をしていきます!

 

作りたいもの

input.php:入力画面

comfirm.php:入力内容の確認画面

complete.php:完了画面

 

学習内容

フォーム作成に置いて必要な知識

  • formタグは、submitボタンが押されたときにaction属性で指定されたURLにフォームのデータを渡す
  • formタグ内のmethodでデータの渡し方を指定する
  • method別のメリット、デメリット
メソッド名 メリット デメリット
GET ブックマーク登録により、フォームデータ付きのページを再現可能 サーバーへのHTTPリクエスト:フォーム入力値をURLに付加して実施する。そのためフォームデータを簡単に見られてしまう
POST サーバーへのHTTPリクエスト:フォーム入力値をメッセージボディに付加して実施する。そのためフォームデータを簡単に見られない フォーム入力値が入ったままのページをブックマークできない

 

  • formタグのname属性で指定した値をキーとしてデータがPHPが最初から用意している変数(スーパーグローバル変数)に入る。
  • 例えば、name属性をname、methodをPOSTとした場合、フォーム入力値は$_POST['name']に入る
  • htmlに<?= $_POST[“name”]>と表記する事で表示できる
  • XSSクロスサイトスクリプティング)の脆弱性を無くすため、フォームから受け取った文字列を表示する際は、htmlspecialchars関数などを通してHTMLの特殊文字を無効化する必要がある。