以下の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()
{
// 通知の送信ロジック
}
}