🤢

トランザクションスクリプトになるリスク

2022/07/21に公開

コードレビューしてもらった際、「モデルが存在しないのでトランザクションスクリプトになるリスクがある」との指摘を受けました。

  • トランザクションスクリプトとは
  • そのリスクは
    の2が気になったので調べました。
    また、トランザクションスクリプトでなく、どう書けばいいか(→ドメインモデル)も調べました。

トランザクションスクリプトとは

ビジネスロジックの実装方法には大きく2種類の方法があるようです。

  • トランザクションスクリプト
  • ドメインモデル(オブジェクト指向)

トランザクションスクリプトは、いわゆる手続き型プログラミングを使って実装する方式です。
データと getter、setter だけを持つような DTO といった入れ物と「サービス」クラスを作成し、サービスに処理を書くのが定番です。
一方で、ドメインモデルは、データを持つクラスに処理も書くという、オブジェクト指向プログラミングで実装する方式です。

https://qiita.com/os1ma/items/7a229585ebdd8b7d86c2#ビジネスロジックはサービスに書くとは限らない

トランザクションスクリプトになるリスク

  • トランザクションスクリプト(手続型プログラミング)は業務ルールが増えれば増えるほどif文が増える
  • 次第にif文が複雑化し、異なるクラスに業務ロジックを書いたコードの重複が起きる。
    (現場で役立つシステム設計 ~手続き型とオブジェクト指向の違い より)

ドメインモデルで書くメリット

  • ドメインモデルでは、新たなルールの追加は、ルールの判断のもとになるデータを持つオブジェクトの(に?)判断ロジックを追加する。
  • ドメインオブジェクトが持つデータは大抵一つか二つで、そのような少ないデータに関連するロジックだけなので、変更は単純になり、楽で安全になる。変更の範囲もそのクラスに閉じ込めやすくなる。

Discussion