4/9 Devlove DDD
時間がたってしまっているので、1つだけインパクトを受けたところを。
増田さんのセッションでの話し。
こんな風な(手元に本がないので適当です)Fowlerのリファクタリングの例で、
public double getCharge(Date date, double baseCharge) { if(BEGINNING_OF_SUMMER <= date && date <= END_OF_SUMMER) { return baseCharge * 1.3; } else { return baseCharge * 1.0; }
(適当です)
を
public double getCharge(Date date, double baseCharge) { if(isSummer(date)) { return getSummerCharge(baseCharge); } else { return getRegularSeasonCharge(baseCharge); } private bool isSummer(Date date) { return BEGINNING_OF_SUMMER <= date && date <= END_OF_SUMMER; } private double getSummerCharge(double baseCharge) { return baseCharge * 1.3; } private double getRegularSeasonCharge(double baseCharge) { return baseCharge * 1.0; }
とすることで、見やすくなるだけでなく、
・夏かどうかを判断する
・夏料金を取得する
・通常料金を取得する
というビジネス仕様がクラス図に反映される!!目から鱗!!
これ、.netだと日本語メソッドとかで作っちゃうともろ仕様書レベルの記述までおちるのかも??とおもった。
DDDって敷居が高いだろうと思っていたんだけど、ビジネス要件をそのままソースコードで表現しておくと、ビジネス要件変更時の変更コストが格段に下がる、という話になるほどなあと思いました。