時間的凝集

 以下のPHPコードは、時間的な関連性があるタスクがまとめられているが、他の時間帯には不要なタスクも同じモジュール内に存在する例です。

 このサンプルコードでは、TemporalCohesionExampleクラス内で特定の時間帯に実行されるタスク(毎時データ処理、データ収集、データ解析)がまとめられていますが、他の時間帯には関連性の低いタスク(データのバックアップ、通知)も同じモジュール内に存在しています。
この設計において、時間的凝集が示されていますが、凝集度は中程度から低いと言えます。
時間に依存した処理を他の凝集度に合わせて再構成することで、設計の改善が可能です。

<?php

class TemporalCohesionExample
{
    public function processHourlyData()
    {
        // 毎時データ処理
        // 関連性の高いタスク: データ収集、データ解析
        $this->collectData();
        $this->analyzeData();

        // 関連性の低いタスク: データのバックアップ、通知
        $this->backupData();
        $this->sendNotification();
    }

    private function collectData()
    {
        // データ収集ロジック
    }

    private function analyzeData()
    {
        // データ解析ロジック
    }

    private function backupData()
    {
        // データのバックアップロジック
    }

    private function sendNotification()
    {
        // 通知の送信ロジック
    }
}
                    

時間的凝集の改善例

 時間的に関連のあるタスクがそれぞれのクラスに分離され、それぞれが特定の時間的処理に関連付けられるようになりました。
各クラスは単一の責務を担当し、凝集度が高まり、コードがより明確になります。
時間的なタスクが変更される場合、該当するクラスのみに影響が及び、コードの保守性と拡張性が向上します。

<?php

class HourlyDataProcessor
{
    private $dataCollector;
    private $dataAnalyzer;

    public function __construct($dataCollector, $dataAnalyzer)
    {
        $this->dataCollector = $dataCollector;
        $this->dataAnalyzer = $dataAnalyzer;
    }

    public function processHourlyData()
    {
        // 毎時データ処理
        $this->dataCollector->collectData();
        $this->dataAnalyzer->analyzeData();
    }
}
                        
<?php

class DataCollector
{
    public function collectData()
    {
        // データ収集ロジック
    }
}
                        
<?php

class DataAnalyzer
{
    public function analyzeData()
    {
        // データ解析ロジック
    }
}

                        
<?php

class DataBackup
{
    public function backupData()
    {
        // データのバックアップロジック
    }
}
                        
<?php

class NotificationSender
{
    public function sendNotification()
    {
        // 通知の送信ロジック
    }
}