• 検索結果がありません。

jjug ccc2009spring jggug

N/A
N/A
Protected

Academic year: 2018

シェア "jjug ccc2009spring jggug"

Copied!
23
0
0

読み込み中.... (全文を見る)

全文

(1)

Grails

シ ス テ ム を

作 る

感覚

(2)

日本 Grails/Groovy ユーザーグループ

[email protected]

[email protected]

(3)

1. ドメインを見つけよう

2. ドメインを表す言語を作ろう

3. ドメインの実現方法を考えよう

4. ドメインを表現しよう

5. プラグインにしよう

6. ドメインを組み合わせよう

7. ドメインを再利用しよう

(4)

支配

王国, 領土, 領地

• 言語, 宗教, 税法, 慣習などが共通

• 共通の性質を共有する領域

ドメインって何だ

(5)

典型的なドメイン

問題ドメイン 解決ドメイン

プロセス・ドメイン

ユーザ, 顧客, 社会, 業界, 部品, ... ソフトウェア, ハードウェア, 技術, ...

開発プロセス, 手法, プロジェクト管理, ...

(6)

ドメインを見つけよう

問題ドメインでは, 例えば

ワークフロー

組織構造

解決ドメインでは, 例えば

データ構造 (ドメイン・クラス, 概念クラス)

画面遷移

プロセス・ドメインでは, 例えば

テスト

構成管理

アプリケーション固有のドメインも有り

(7)

組込みドメインの例

codecs URL mappings controllers

core hibernate

filters domainClasses

dataSource i18n

logging scaffolding

services web flow

sevlets

当然だけど, ほとんどが技術ドメインに属する

(8)

ドメインを表す言語を

作ろう

例えば概念クラスの場合

これは標準的なドメインなので, 組込みで用意されている

例えばワークフローの場合

これはまだないので, 作らなければならない

例えばマスタ画面テストの場合

これは概念クラスの言語を流用できるのではないか

(9)

概念クラスの例

class Product implements Comparable, Serializable { String name, description

static constraints = {

name(blank:false, unique:true)

description(blank:false, validator: { it?.indexOf("<script") < 0 &&

it?.indexOf("<link") < 0 })

}

static mapping = {

cache usage:"transactional" }

static belongsTo = [category:Category] static searchable = true

}

制約記述DSL

プラットフォーム非依存 scaffoldなどでも利用

ORM 
 DSL

Hibernate依存

単なるプロパティだが 解釈される

これはまた別のドメインで解釈

(10)

ワークフローの例

def OrderProductTestProcess = {

OrderFormWait(isStart:true, dueDate:0, nodeInfo:'Product Order') {

variable(productId:READ_ONLY, catalogId:READ_ONLY, price:READ_ONLY, quantity:WRITE_READ,

commentary:WRITE_READ) action {

Log(logMessage:'Starting ordering product...') return Order()

}

on('Order').to(['CheckingOrder']) }

// ... }

プロセスを定義

ノードを定義

変数を定義

アクションを定義

遷移を定義

(11)

ドメインの実現方法を

実現方法の選択肢

考えよう

既に Java で使える技術はないか

JVM 上で使える技術はないか

それ以外で使える技術はないか

自前で作ることができるか

Groovy は簡単!

技術を言語で wrap する

仕様を実装に compile する

(12)

概念クラスの例

RDBMS hibernate

spring hibernate

plugin domainClasses

plugin

hibernate を抽象化

*.cfg.xml などを書く必要はない

ドメイン言語から生成

詳細も設定可能

ORM を抽象化

問い合わせ言語を高レベル化

プログラミング言語と自然に統合

概念クラスの記述から自動的に永続化

(13)

ワークフローの例

ワークフロー記述を抽象化

実際には自前のワークフロー・エンジ

ンを搭載ワークフローに対応する画面も生成

エンジンを交換することもあり得るだ ろう

自作 ワークフロー

エンジン grailsflow plugin

画面の スカッフォールド

(14)

実現方法

メタプログラミングを活用する

クロージャを活用する

Map をあたかもオブジェクトのように使う

builder や slurper を活用する

Spring Bean を活用する

AST変換を活用する (コンパイル時メタプログラミング)

...

(15)

ドメインを表現しよう

言語を用いて, 個々のドメインを実際に表現してみる

うまく表現できる?

ユーザでも理解できる?

固すぎない?

必要ならば拡張しよう

拡張しやすい?

実現可能?

(16)

プラグインにしよう

言語, 実装, アダプタをセットにする

必要ならば

実行独立プラグイン (CIP)

プラットフォーム独立プラグイン (PIP)

プラットフォーム特化プラグイン (PSP)

などに分ける

(17)

ドメインを

組み合わせよう

システムを作るとは, ドメインを組み合わせること

一部は従来のような ベタな コードでもいい

(18)

ドメインを

再利用しよう

多くの場合, ドメインは再利用可能

コンポネントよりも再利用性が高いことが多い

プラグインはドメインを実体化したもの

必要ならば拡張したり, 洗練したり, 汎用化したりする

ドメインは資産である

(19)

grails 開発プロセス

ドメインを見つける

ドメイン記述言語を作る

ドメインを実装する

ドメインで記述する

プラグイン化する

ドメインを再利用する

ドメインを組み合わせる

(20)

ドメインを見つけるひと

役割

ユーザ, クライアント

言語を設計するひと

ドメインを実現するひと

ドメインを組み合わせてアプリケーションを作るひと

メインを言語で記述するひと

ドメイン把握能力 営業力

技術力 総合力

聴き取り能力 構想力 抽象化

能力

専門的 技術力

(21)

• コーディング/テストの工数を大きく減らすこと

ができる

• 仕様記述により, 開発や変更, 保守が迅速, 容易

になる

• 技術や問題に関するノウハウをプラグインとし

て資産化できる

• チームのさまざまな能力を活かすことができる

• 労働集約型から知識集約型へ

(22)

http://www.jggug.org/

日本 Grails/Groovy ユーザーグループは

皆さんの参加をお待ちしています

毎月 g* workshop を開催 名古屋支部, 関西支部もあり

(23)

Japan Grails/Groovy User Group [email protected]

http://www.jggug.org/ 2009.04.21

参照

関連したドキュメント

成果指標 地域生活支援部会を年2回以上開催する 実施場所 百花園宮前ロッヂ・静岡市中央福祉センター. 実施対象..

[r]

事業名  開 催 日  会      場  参加人数  備    考  オーナーとの出会いの. デザイン  3月14日(土)  北沢タウンホール 

開催期間:2020 年 7 月~2021年 3 月( 2020 年 4 月~ 6 月は休講) 講師:濱田のぶよ 事業収入:420,750 円 事業支出:391,581 円. 在籍数:13 名(休会者

開催日時:2019 年4 月~ 2020 年3 月 講師:あかしなおこ. 事業収入:328,200 円 事業支出:491,261 円 在籍数:8 名,入会者数:1

本部事業として「市民健康のつどい」を平成 25 年 12 月 14

会  議  名 開催年月日 審  議  内  容. 第2回廃棄物審議会

[r]