Open6

ビジネスロジックやらクリーンアーキテクチャやら

nkmryunkmryu

実装時に同時に考えなければならない事柄を減らすこと
そうした状態を作るために有効な手段の一つとしてLayered Architectureがあるわけです。
決してLayerをきれいに分割する事自体が目的ではありません。

https://qiita.com/shunjikonishi/items/9cbf67314000cc42fbcc

nkmryunkmryu

Rails のようなフレームワークであれば、ここまでで書いてきたパターンのうち、

Controller に全部書く
2-2. エンタープライズビジネスルールだけを Model に書く
3. Service と Model にビジネスロジックを分けて書く

のどれかがいいのではないかと思います。
この中でどれを採用すべきかは状況によって変わると思います。
上ほど初期実装・学習コストで有利、下ほどメンテナンス性・テスタビリティで有利です。

Service を使う前提の Spring のようなフレームワークの場合
Spring のようなフレームワークの場合、

  1. Service にビジネスロジックを全部書く
  2. Service と Model にビジネスロジックを分けて書く
    のどちらかになります。

これはいわゆる**「トランザクションスクリプト」と「ドメインモデル」のどちらを採用するかという議論と同じ話**です。

https://qiita.com/os1ma/items/66fb47f229896b32b2e8

nkmryunkmryu

ウィキペディアの Model_View_Controller のページにも、

MVC(Model View Controller モデル・ビュー・コントローラ)は、ユーザーインタフェースをもつアプリケーションソフトウェアを実装するためのデザインパターンである。

と書かれています。
実は、MVC、MVP、MVVM といったものは、全てプレゼンテーション層のアーキテクチャなのです。

https://qiita.com/os1ma/items/7a229585ebdd8b7d86c2