home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

日記/2012/12/31/SQLをうまく扱うプログラム設計メモ

日記/2012/12/31/SQLをうまく扱うプログラム設計メモ

日記 / 2012 / 12 / 31 / SQLをうまく扱うプログラム設計メモ
id: 1128 所有者: msakamoto-sf    作成日: 2012-12-31 01:01:48
カテゴリ: Grails Java システム開発 

最近Grailsを少しかじったのだけれど、その中で「Service」というArtefact(コンポーネント、みたいな意味合いのようだけれどGrailsの世界観ではこんなふうに表記するみたい)というのがよくわからなかった。

どうもDomainモデルとかそのへんと絡んでそう。
実は、自分の場合データ操作をどう設計するのかってめちゃくちゃ自己流、というか経験的な直感でクラス設計しまくっていたので、その辺、一般的・・・というかOOPの「意識高い」系だとどんなもんなんだろうと、ヒッジョーにイマサラナガラなんだけどPoEAA本ひっくり返してみて、SQLとの連携に使われるパターンを確認。

  • Transaction Script
  • Domain Model
  • Table Module
  • Service Layer
  • Table Data Gateway
  • Rwo Data Gateway
  • Active Record
  • Data Mapper

・・・なんというか、自分の今までの直感と経験による言語化出来ない地雷回避感覚に基づくクラス設計が、そうそう外した設計にしてはいなかったようで、ホッと一安心。
あともう一つ気づいたのは、「これが一番正解」というようなパターンはなくって、RoRとかRails系だとActiveRecordがよく使われているけど、じゃぁそれがPoEAAで最も推奨されているのかというとそれほどでもなくて、割りと「規模によってはRow Data Gatewayでもいいんじゃね?」とか、Domain Model + Data Mapperの組み合わせとか、割りと、アプリケーションの規模に応じて組み合わせを変えて、結局のところバランス感覚で「ベストは無いのでベターを選ぶ」的なオチどころ探索の流れ。

逆に言うとActive Recordだけじゃ物足りないシーンも当然出てくるので、そうした場合は他のパターンでも全然OKな感じに書かれてる。

多分自分がActiveRecord嫌いなのは、これまでのお仕事の経験上、ActiveRecordのメリットが活かせない設計シーンが多かったからなのかなーと。
Servce Layer挟んでDomain ModelとかActive Record使う、という設計は全く違和感がなくて、いえむしろフレームワーク側でActive Record自動生成してくれるんなら両手上げてそっちに雪崩れ込みたいくらいです。

トランザクションをまとめて、しかもそれが単体テストの自動化にシームレスに組み込まれば、どんなパターン使おうと何もいうことはござーません。

で、GrailsのServiceに話を戻すと、結局のところやっぱりService Layerと同じ位置づけになってて、トランザクションを扱えます。ただしHibernateのトランザクションがそのまま透過されるのかというとちょっとその辺が勉強不足でよくわかりません。2.1.0の公式ドキュメントにも、rollback周りでいろいろ注意点が書かれてるんですが、流したくらいで熟読はしてないです。
とはいえSpringDICのおかげで、割りとPOJOとしてテスト出来る感じにしてくれてるので、個人的にはある程度複雑なデータ処理が絡むところはServiceにまとめてテスト可能な状態にしておきたいところです。(まぁView側でちょっとカテゴリとかのプルダウンメニュー表示するのに使いたい、位のロジックであればDomainそのまま使うかDomain側に実装しておいても問題無いと思います)

以下、参考:

ちなみに2.1.0の公式ドキュメントではtransactionのデフォルトの"propagation level"(・・・なにこれ?)というのがPROPAGATION_REQUIREDになっているとのこと。

よくわかりませんが、Spring 3.0系では、Transaction使う時のデフォルト値になってるみたいなので、恐らく大体のケースでは問題ない設定なのでしょう。多分。

このへんの「トランザクション」が、DB側の「トランザクション」と同意なのかはよくわかりません。


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2012-12-31 01:33:53
md5:025d6caaead422c7da24279429fe4a44
sha1:85bcbc92820e08e86a115373064a8e749efe4660
コメント
コメントを投稿するにはログインして下さい。