TERASOLUNA Framework 5系ガイドライン読んだ(第3章 アプリケーション開発)

Webアプリケーション向け開発プロジェクトの作成

ドメイン層の実装

ドメイン層は、アプリケーション層に提供する業務ロジックを実装するためのレイヤである。

Entityの実装方針

  • Entityクラスはテーブルごとに作成する。
  • テーブルにFKがある場合はFK先のテーブルのEntityクラスをプロパティとして定義する。
  • コードテーブル系はEntityとして扱うのではなく、java.ang.Stringなどの基本型で扱う。

Repositoryの実装方針

  • Repositoryは主体となるEntityに対して作成する。
  • RepositoryインタフェースとRepositoryImplは基本的にドメイン層の同じパッケージに配置する。
  • Repositoryで提供するDTOはRepositoryインタフェースと同じパッケージに配置する。

Serviceの実装方針

  • Serviceはビジネスルールに関わる処理の実装に専念する。
  • トランザクション境界は原則Serviceに設ける。
  • 他のServiceクラスのメソッドを呼び出すことは原則禁止。溶融したい場合はSharedServiceクラスを作成する。
  • 業務データを中心に設計・実装する場合はEntityごとにServiceを作成する。
  • 画面からのイベント中心に設計・実装する場合はユースケースごとにServiceを作成する。
  • BLogicクラスを作成する場合はイベントごとにServiceを作成する。

トランザクション管理について

宣言型トランザクション処理を利用する。

  • トランザクシション管理対象とするクラスまたはクラスメソッドに対して@Transactionalアノテーションを指定する方法を推奨する。
  • bean定義ファイルに要素を追加することで@Transactionalアノテーションを使ったトランザクション境界の指定が有効になる。

インフラストラクチャ層の実装

インフラストラクチャ層では、RepositoryImplの実装を行う。

RepositoryImplの実装

MyBatis3を使ってRepositoryを実装
  • アプリケーション開発者はRepositoryインタフェースとマッピングファイルを作成し、基本的にRepositoryImplの実装は必要ない。
JPAを使ってRepositoryを実装
  • 基本的なCRUD操作はIpaRepositoryを継承したインタフェースを作成するだけで、基本的にRepositoryImplは不要。
  • 動的なクエリ(JPQL)を発行する必要がある場合にはRepositoryImplが必要になる。

アプリケーション層の実装

Controllerの実装

Controllerの役割
  • @RequestMappingアノテーションを付与し、リクエストを受け取るためのメソッドを提供する。
  • リクエストパラメータの入力チェックを行う。
  • 業務処理の呼び出しを行う。
  • 業務処理の処理結果をModelに反映する。
  • 処理結果に対応するView名を返却する。
Controllerクラスの作成方法

POJOクラスに@Controllerアノテーションを付与したクラスを作成する。

@Controller
public class SampleController {
// ...
}
リクエストとハンドラメソッドのマッピング方法

リクエストを受け取るメソッドは@RequestMappingアノテーションを付与する。

@RequestMapping(value = "hello")
public String hello() {
// ...
}

フォームオブジェクトの実装

HTML状のformを表現するオブジェクト(JavaBean)であり、以下の役割を担う。

  • DBで保持している業務データを保持し、HTML(JSP)formから参照できるようにする。
  • HTML formから送信されたリクエストパラメータを保持し、ハンドラメソッドで参照できるようにする。

View(JSP)の実装

TERASOLUNA Frameworkガイドラインでは、JSPを使用してViewを実装する。

Developers Summit 2017 Summerに行ってきた。

2017/07/28(金)に、Developers Summit 2017 Summerに参加してきました。
参加セッションのいくつかをメモ書き。
うろ覚えなところもあるのはご愛敬。

event.shoeisha.jp

SIerオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~

NTTデータの鯵坂さんによるセッション。

  • なぜNTTデータHadoopサポートサービス、コミッタをしているか?
    • SIerとしてトラブルをお客様が満足する形で解決しなければいけない。
    • 自力であればお客様を満足させられるレベルのサービスが提供できる。
    • バグ修正を本体にマージするまで実施できる。
  • コミッタになるまでの経緯
    • 機能の進化にドキュメントが追いついていないことが多く、ドキュメントの誤りを数多く指摘した。
  • コミッタを目指すために
    • 必要とされる技術や言語英語は後から追いついてくるので、数をこなす。
    • コミッタになってから活動を継続できるかが最も重要

Yahoo! JAPANのコミュニティが生み出す価値

Yahoo! JAPANの善積さんによるセッション。

  • なぜコミュニティから成長を生み出したいのか
    • バーティカルに強いエンジニアが活躍
    • 企業がコミュニティを形成するのはどうか
      • 課題を解決することを目的にする

Deep Dive into JavaScript Community

東京Node学園の古川さんのセッション。

  • 元々はサーバーサイドエンジニアだったが飽きてしまいUI方面のJavaScript楽しそうだということで始めた
  • コミュニティは刺激になるし、振り落とされないよう頑張ろうと思える。
  • 自分もコミュニティに関わりたくなってくる、恩返ししたいと思える。
  • 好きなことをやっていても継続するにはまた別の力が必要。
  • コミュニティをより良くしていくために
    • 受け継いだときは今まで通り安定して運営
    • 次年度はNode.jsを世界的なコミュニティとつなげる
      • 海外スピーカーが増えた
    • その次はもっとインタラクティブ
      • 相互にコミュニケーションが取れるイベントを実施した
    • 初心者ハンズオンを開催した。初心者が躓きやすい箇所を知れる、初心者は技術を学べる
  • 最近の問題点
    • 成熟してきてなんとなく「参加しづらさ」を感じる人がでてきた。
      • Node学園付属小学校:元の学園が成熟しすぎており、初心者歓迎向けのコミュニティを作った
      • Node女学園の開催:女性だけが参加できるコミュニティ

感想

他にもIBMのWatsonとかいろいろ面白いセッション聴いたけど、とりあえずここまで。
2年ぶりにデブサミに参加しましたが、やっぱり刺激をもらえる。
もっと話を聞いていたいという反面さっさと帰って手を動かしたい気にもなってしまう。
また明日から頑張ろう、と思えるいい時間だった。…しかし頭使うので疲れた。
ちなみに急に今まで放置してたブログ書きだしたのも、このデブサミの影響なんですよね。
自分でも少し発信してみようと思います。
いつまで続くかわかんないけどね。

どすこい。 (集英社文庫)

どすこい。 (集英社文庫)

TERASOLUNA Framework 5系ガイドライン読んだ(第2章 アーキテクチャ概要)

はじめに

Spring FrameworkをいろいろいじっていたらTERASOLUMA Frameworkの5系がSpring Framework採用しているとのことだったので、ガイドラインを読んでみている。
なのでSpringのおさらい等含めてその際のメモ書き。

フレームワークの構成要素

共通ライブラリ(terasoluna-gfw)以外はほぼOSSをそのまま採用している。

アプリケーションのレイヤ化

  • アプリケーション層(Controller, Form, View, Helper)
  • ドメイン層(Service, Repository, Domain Object)
  • インフラストラクチャ層(RepositoryImpl, O/R Mapper)

アプリケーション層とインフラストラクチャ層はドメイン層に依存するが、ドメイン層が他の層に依存してはいけない。

レイヤの定義

アプリケーション層

クライアントとのデータ入出力を制御する。ビジネスルールを含んではいけない。

  • Controller:画面遷移の制御、ドメイン層のServiceの呼び出し
  • View:クライアントへの出力
  • Form:フォーム表現、入力チェックルール宣言
  • Helper:Controllerの補助

ドメイン

ビジネスルールの実行をする。

  • Domain Object(Entity):ビジネスを行う上で必要な資源や発生するものを表現するモデル(Employeeとかそういうのね)
  • Repository:Domain Objectの問い合わせやCRUD処理
  • Service:業務処理を提供

インフラストラクチャ層

ドメイン層(Repositoryインタフェース)の実装を提供する。

  • RepositoryImpl:Repositoryインタフェースの実相
  • O/R Mapper:データベースとEntityの相互マッピング