uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

Grailsでシステムを作る感覚/山田さん

本エントリは、エントリJJUG CCCいってきましたの一つです。セッションを聞いてのメモ書きです。元の発表資料:BOFB-1-4.pdf

前置き

  • Grailsではドメインクラスからトップダウンに生成するのでRailsよりGAEに対して相性がよい。
  • SunがOracleに買われた話とGAE/Jが話題ですね

ドメインとは

  • ドメイン=支配。同じ宗教を持った人の国。同じ性質を持ったものの集合。
  • 典型的なドメイン3つ:
    • (1) 問題ドメイン(何かを売りたい)
    • (2) 解決ドメイン(ソフトウェアをどう作ればいいか,ハードは、認証は、技術)
    • (3) プロセスドメイン(開発プロセス)

開発者の仕事は(1)と(2)の橋渡し。Javaを書くからお金がもらえるのではない。
(1)を(2)に変換するという仕事。

  • Grailsで開発するときに最初にすること:ドメインを見つける。
    • (1)ワークフロー,組織構造
    • (2)データ構造、画面遷移
    • (3)テスト方法、構成管理
    • アプリケーション固有のドメイン

何を対象とするの?という話。

  • Grails組み込みのドメインの例(Grailsそのものは解決ドメインに属する)
    • core logging urlmapping, ..

ドメインを表す言語(DSL)を作ろう

    • 概念クラス(ドメインクラス、モデル)はGrails組み込みで用意されている
    • ワークフローは作らないとならない。
    • マスタ画面テストは概念クラスの言語を流用できる?
  • 「DSLを作る」=ドメインを定義する、ということの具体的な形。
  • DSLは組み合わせられる。概念クラスを定義するためのDSLに制約やORMのDSLを組み込める。

DSLによる仕様と実装の分離

  • DSLは実装方法を含まない。「What」しかない。実装方法、すなわち「HOW」は、
    • 既にあるJava技術でまかなえないか
    • NO→JVM上の他の言語技術でまかなえないか
    • NO→JVM上じゃなくてもいいから他の言語で
    • NO→自分で作る(GroovyだからDSL実現サポートあり)
  • できたDSLの処理系を使って、「仕様をコンパイル」して実システムを作る。
  • 「what+how+アダプタ」=プラグイン
  • プラグイン分類(MDAを参考に):
    • プラットフォーム独立プラグイン
    • プラットフォーム特化プラグイン
  • システムを作る=ドメインを作りくみあわせる
  • 現実の問題に近いドメインは再利用しやすい(本当か?)

DSLを介して役割の分担が実現される

    • 言語仕様(DSL仕様)設計
    • 言語処理系(プラグイン)の実装
    • 業務を記述する(ドメインを書き下す)
    • システムを構築する(ドメインを組み合わせる)
 [感想] Grailsについて、自分にとって新たな
視点で大局的概観が得られた。こういう話がで
きるのは今、山田さんならでは。
ただ、現実と理想は違うとは思うけど、
理想の話も重要。理想の話が重要。