Symfony/Expression Language コンポーネントを使った設定式のサンプル。
- Expression Language component 公式マニュアル
- ExpressionLanguage コンポーネント マニュアル日本語訳
- symfony/expression-language
下記ブログを拝読して考えたみたものです。
リファクタリングのエッセンス | GuildWorks Blog
- 価格が季節に連動するようなサービスを売っているとする。(避暑地とか、スキー場とか、ガス料金とか?)
- 季節(夏かそれ以外の季節か)によって料金の算出ルールが異なる。
- 変わりやすいビジネスポリシー
- 料金の計算式
- 式自体や、式中の固定値の値は可変
- 夏の定義
- 何月何日から何日までを夏料金にするのか?は可変
- 料金の計算式
- 料金は季節に応じた計算ルールによって求まる
季節 | 期間 | 料金 |
---|---|---|
夏 | 7月〜8月 | (基本料金) x (夏レート) |
夏以外(デフォルト) | それ以外の季節 | (基本料金) x (デフォルトレート) + (デフォルト固定料金) |
normal:
span: (date >= 0101 and date < 0701) or date >= 0901
formula: base * 1.2 + 1000
summer:
span: date >= 0701 and date < 0901
formula: base * 0.9
- セットアップ
$ composer install
- 実行
$ php scripts/main.php
- Test
$ phpunit