Chura でのアーキテクチャについて
Teeda + uuji での開発時に、サービス層はないのかな?という疑問があったのですが、ひが氏のブログに答えがありました。
過去のDIではインターフェース中心の設計が強く推奨されていたため、レイヤモデルアーキテクチャは重く感じられても非常にDIにフィットしていました。
しかし、Javaでさらに生産性を高めるためには、レイヤモデルアーキテクチャは重くて足かせになります。そこで考えたのが「ページ駆動開発」と「テーブル駆動開発」です。これらの開発手法は、Churaファミリーを使って行います。
実装する必要のあるクラスは基本的にPageクラスのみ。そのPageクラスもメソッドの部分を埋めるのみですみます。画面固有のロジックはPageクラスに記述します。複数の画面で共通に使うロジックのみインターフェースを使うようにして外側のクラスに切り出すのです。
なるほど。
View - Service - DAO のような構造の場合、Service 層では View への依存を排除してドメインモデルに対する処理とするのですが、Chura では View+Service = Page に近い感じですね。
Service 層を無くした場合に問題となる、共通のロジックについてはインタフェースとして切り出して、別クラスにすると。あとは DI すればよいわけですね。
たしかに、これはこれでアリなのかも。実際に以前かかわった案件で、Service と View との分離は困難であった*1ため、画面がわかればビジネスロジックを実装しているクラスが決まる形にしていました*2。