Lazuli

らずり

疎結合を意識する

最近、レガシーに満ちたコードをこういう書き方に直してる。
本を書き出す処理を例に。

<?php
// 書き出しを行うクラス
$publisher = new Publisher();

// DIコンテナ的なやつ。なんらかのサービスを取得するファクトリを渡す。
$container = new Container(new ServiceFactory);

// Epub書き出し用のサービスを取得してpublishする
$result = $publisher->publish($container->get('Epub'));

// PDF書き出し用のry
$result = $publisher->publish($container->get('Pdf'));

恩恵として、それぞれのクラスが疎結合になって依存を気にせずテストできるようになる。
Publisher クラスがポリモーフィズム実現して渡されるクラスの中身を知らなくても処理出来る。
など。

よく巷で言われるようにクラス内で new しないように気をつけて書けば、それなりに疎結合の形になる。
new する時点で依存関係になるから駄目だな。