フレームワークへの依存度を下げるFLUDパターン (1)

FLUDパターンとは?

フレームワークへの依存度を下げるためのシンプルなパターンです。

クリーンアーキテクチャなどが複雑で用語も難解なため、もっとわかりやすいパターンがあった方がいいかと思い考案しました。

FLUDパターンは、以下の3階層のパターンです。

黒い矢印は依存(使うということ)を表します。白い矢印は汎化、つまりインターフェイスにして使うということを表します。

階層の説明

フレームワーク/ライブラリ層

  • フレームワークやライブラリを直接使うコード
  • フレームワークを使ったMVCコードは通常全てこの層になる

ユースケース層

  • ユーザーがソフトウェアで行えるアクション
  • ソフトウェアがなくなったら存在しなくなる
  • ドメイン層のオブジェクトを使いユースケースを組み立てる

ドメイン層

  • ドメイン知識
  • ソフトウェアを適用して問題解決しようとする領域(ドメイン)に存在するルールや制約
  • ソフトウェアがなくても存在する
  • ユースケースによって変わることがない

FLUDパターンの基本ルール

  1. MVCコードから、ドメイン層とユースケース層のコードをできる限り分離する
  2. 下の層のコードが上の層のコードを取り扱う場合は、抽象型(インターフェース)に依存する

CodeIgniter4でのディレクトリ構成

CodeIgniter4でのディレクトリ構成例は、以下のようになります。

project/
├── app
│   ├── Config
│   ├── Controllers
│   ├── Database
│   ├── Filters
│   ├── Helpers
│   ├── Language
│   ├── Libraries
│   ├── Models
│   ├── ThirdParty
│   └── Views
├── packages ... パッケージ用
│   ├── news ... Newsパッケージ
│   │   └── src
│   │       ├── Domain  ... ドメイン層
│   │       └── UseCase ... ユースケース層
│   └── shared ... 共有パッケージ
├── public
├── tests
├── tools
├── vendor
└── writable

packages フォルダを追加して、そこにパッケージ別にドメイン層とユースケース層のコードを分離します。

その他のコードについては、ひとまず、フレームワークの規約通りにそのままにしてあります。 パッケージのフォルダにまとめることも考えられます。

フレームワークへの依存度を下げるFLUDパターン (2) へ続く。

参考

Tags: codeigniter, codeigniter4, ddd, mvc, php

CodeIgniter4でChrome Loggerを使う

準備

Chrome Loggerのインストール

Chrome Logger - Server side application debugging をChromeにインストールします。

CodeIgniter4の設定

app/Config/Logger.php のコメントアウトされている ChromeLoggerHandler を有効にします。

--- a/app/Config/Logger.php
+++ b/app/Config/Logger.php
@@ -127,13 +127,13 @@ class Logger extends BaseConfig
          * The ChromeLoggerHandler requires the use of the Chrome web browser
          * and the ChromeLogger extension. Uncomment this block to use it.
          */
-        // 'CodeIgniter\Log\Handlers\ChromeLoggerHandler' => [
-        //     /*
-        //      * The log levels that this handler will handle.
-        //      */
-        //     'handles' => ['critical', 'alert', 'emergency', 'debug',
-        //                   'error', 'info', 'notice', 'warning'],
-        // ],
+         'CodeIgniter\Log\Handlers\ChromeLoggerHandler' => [
+             /*
+              * The log levels that this handler will handle.
+              */
+             'handles' => ['critical', 'alert', 'emergency', 'debug',
+                           'error', 'info', 'notice', 'warning'],
+         ],

         /*
          * The ErrorlogHandler writes the logs to PHP's native `error_log()` function.

サンプルコード

コントローラにログを出力するコードを追加します。

<?php

namespace App\Controllers;

class Home extends BaseController
{
    public function index()
    {
        $this->logger->log('debug', 'This is a debug message.');
        $this->logger->log('error', '{file}:{line} This is a error message.');
        $this->logger->log('info', 'This is a info message.');

        return view('welcome_message');
    }
}

Chrome Loggerの使い方

サイトを表示して、Chrome Loggerのアイコンをクリックして有効にします。

有効になりました。

これでChromeのコンソールにログが出力されます。

参考

Tags: codeigniter, codeigniter4, chrome

CodeIgniter4でdd()を使う

dd()関数

CodeIgniter4にはデバッグ用の dd()d() 関数が用意されています。 CI_DEBUG 定数がtrueの場合(デフォルトでは、developmenttesting 環境)に使用できます。

  • dd() ... 変数の内容を表示して exit() する
  • d() ... 変数の内容を表示する

dd()の使い方

使い方は var_dump() 関数と同じです。

dd($this->request->getUri());

これで、$this->request->getUri() の内容が表示されます。

表示の使い方

左の「▼」をクリックすると、

中身が表示されます。

「▼」をダブルクリックすると、

すべての中身が展開されます。

右の「🔎」をクリックすると、検索ボックスが表示されます。

プロパティを検索できます。

参考

Tags: codeigniter, codeigniter4