ホームページ >バックエンド開発 >PHPチュートリアル >ヤグニ (あなたにはそれは必要ない)

ヤグニ (あなたにはそれは必要ない)

DDD
DDDオリジナル
2024-12-03 20:39:12348ブラウズ

YAGNI (You Aren

基本原則

将来必要になるかもしれないと考えられるときではなく、実際に必要なときにのみ機能を実装してください。

時期尚早な抽象化 (悪い)

// Over-engineered solution anticipating future needs
class UserService {
    private $database;
    private $cache;
    private $logger;
    private $notifications;
    private $analytics;

    public function __construct(
        DatabaseInterface $database,
        CacheInterface $cache,
        LoggerInterface $logger,
        NotificationService $notifications,
        AnalyticsService $analytics
    ) {
        $this->database = $database;
        $this->cache = $cache;
        $this->logger = $logger;
        $this->notifications = $notifications;
        $this->analytics = $analytics;
    }

    public function createUser($data) {
        $this->logger->info('Creating user');
        $user = $this->database->insert('users', $data);
        $this->cache->set('user_' . $user->id, $user);
        $this->notifications->sendWelcomeEmail($user);
        $this->analytics->trackUserCreation($user);
        return $user;
    }
}

シンプルな実装 (良い)

class UserService {
    private $database;

    public function __construct(DatabaseInterface $database) {
        $this->database = $database;
    }

    public function createUser($data) {
        return $this->database->insert('users', $data);
    }
}

現実世界のシナリオ

電子商取引の例

// Bad: Implementing unused features
class Product {
    private $name;
    private $price;
    private $stock;
    private $weight;          // Not needed yet
    private $dimensions;      // Not needed yet
    private $shippingZones;   // Not needed yet
    private $taxCategories;   // Not needed yet
    private $customFields;    // Not needed yet

    public function calculateShipping($address) {
        // Complex shipping calculation that isn't required
    }

    public function calculateTax($country) {
        // Complex tax calculation that isn't required
    }
}

// Good: Implementing what's needed now
class Product {
    private $name;
    private $price;
    private $stock;

    public function __construct(string $name, float $price, int $stock) {
        $this->name = $name;
        $this->price = $price;
        $this->stock = $stock;
    }
}

一般的なアンチパターン

  1. 必要になる前に複雑な構成システムを構築する
  2. 将来の拡張性を備えた複雑な継承階層の作成
  3. 将来の機能のためのデータベース フィールドの追加
  4. 不要な API エンドポイントの実装
  5. 特定の問題に対する一般的な解決策の作成

利点

  1. コードベースの複雑さの軽減
  2. メンテナンスコストの削減
  3. 開発サイクルの短縮
  4. 現在の要件に重点を置いた方がよい
  5. 技術的負債の減少

例外ケース

  1. コアアーキテクチャの決定
  2. 後で変更するとコストがかかるデータ構造
  3. セキュリティに関する考慮事項
  4. 規制遵守要件

以上がヤグニ (あなたにはそれは必要ない)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。