FrontPage

アンチPHPプロジェクト概要

別にPHPが嫌いな訳じゃないので、注意。
ここ数ヶ月の妄想が固まってきたので、メモを開始。2ヶ月以内に動くものを作る。ついでに具体的な案件への実戦投入をする。

Javaによるコンシューマ向けサイト構築の短所

コンパイル、デプロイ作業が多い

表示を変更するために多層に渡る修正が必要、一貫性を維持するためにコンパイル、デプロイを行なうが、PHPなどと比べ作業効率が悪い。

覚えるルールが多い

web.xml、ServletAPI、JSP等々とにかく覚えなければいけないレイヤーが多いためスキルの低いリソースの活用が難しい

Rails文化じゃ駄目なの?

はっきり言って、ラジカルすぎて私がおつむテンテンなのでついてけないorz
でも、設定より規約という概念は真理だと感じる。目指すところはアーキテクチャAK-47、ただし世界を変える必要はないwww

目的

コンシューマ向けのJavaシステムにおいて手軽なサイト構築を行なう。

具体的なターゲットモデル

検索を備えたリスティングサイト。高度な業務システムなんかは範囲外!

不文律

直感的であること、覚えるルールは最小限!

修正したら、すぐに結果がみれる!

明示的なコンパイル、デプロイ不要

Tomcatは起動しっぱなし!

  • 普通に開発するだけならコンテキストのリロードも再起動もいらない!

DBを差し替えることなんか気にしない

  • SQLも直に書いちゃう
  • データビーンはスクリプトで作って使い捨て!

利用の際に関数的な共通化はVelocityのToolBox?とマクロに押し込める!

  • 共通化のほとんどは関数で事足りる

取り込む技術

ロジック層

  • Groovy
  • GroovySQL

表示層

Groovletは使わない。

  • VelocityTools?
    一般的で文法も容易、マクロによる拡張も容易

ビルド

  • Maven2
    アーキタイプで構築したら開発が開始できる・・・みたいな

実装

開発に当たって

迷ったら直感的な手法を採用

保険としての拡張性より今何をしたいか?

リッチかプアを選ぶならプア

お節介なことはしない、開発者が自分で作る環境を用意すればよい。

アイデア

  • URLから駆動されていくこと
    • 必須
    • URLからコードの配置が推測できること、つまりRailsのような規約
  • 共通ロジックがチェーンできること
    • 必須
    • 例えば共通処理とか?
      • マッピングに対する正規表現で切り分けとか?
  • DBに対する操作はGroovySQLを利用
    • DataBean?はスクリプト上で定義
  • VelocityServlet?ToolBox?がGroovyで書けること
    • 当面は必須じゃない
    • うまい方法を用いてToolBox?のXMLへの登録無しに動的に呼び出したい
  • 認証モデルはServletのものを利用することを前提
    • 別に自分で実装する必要ない
  • どっかでDIコンテナ使いたい
    • 今のところ使いたいだけ優先度低
    • 使うならS2だけど、プログラマブルに使うならNanoとかPicoか?
  • プログラマブルなアプローチによるAOPでトランザクションも実現できること
    • 今のところ優先度低
    • 使うならS2でw
  • レイアウトには対応したい

アーキテクチャ

フロー

ブラウザ→Groovyスクリプト→Velocity→ブラウザ

各層の情報の受け渡し

  1. リクエストを中心に据える 例えばスクリプト上で作ったオブジェクトはすべてリクエストにsetAttribute
    • VelocityServlet?ってリクエストにセットされてる値を透過的に呼び出せたっけ?
      ロジック側
      request.setAttribute("userDate",object)
      Velocity上
      $userDate.name
      みたいな?
    • もちろんSessionもあり

コントローラ

フロー

  1. ロジックのサーブレットがRequestをハンドリング
  2. 共通ロジックの呼び出し
  3. URLから決定されるスクリプトの呼び出し
  4. URLから決定されるVelocityへのDispatch
    • もしリダイレクトされているならVeocityへはDispatchしない

動作

  • request,response,context,session,GroovySQL,logのバインド
    • GroovySQLはDataSource?をバインドしたもの
    • logはcommons-logging
      • っていうか、標準でなにかあったっけ?→Groovy
  • スクリプトファイルの更新履歴を判定
    1. 更新されているなら再読込
    2. 更新されていないならキャッシュを利用
    • デプロイ時には常にキャッシュ利用とか?
      • 複雑になりそうならやめる

リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Last-modified: 2010-03-14 (日) 07:00:27 (2830d)