忍者ブログ

2024
09
17

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

2024/09/17 (Tue.)

2008
12
01

memo

Strutsは、Servletベースの開発にMVCというアーキテクチャパターンを持ち込み、定型化しました。Struts以前のばらばらだった開発スタイルMVC定型化したのです。実際は、Sunのblueprintアプリケーションの中にすでにMVCは取り入れられていたので、それをフレームワーク化したというほうが正確かもしれません。

Springは、POJOベースの開発をもたらしました。EJBに苦しんでいた開発者を救ったのです。POJOベースの開発は、テストのしやすさというメリットをもたらしますが、生産性そのものは改善しません。普通Javaクラスでかけるようになっただけだから。EJBに比べると生産性はずっといいんだけど。

PR

2008/12/01 (Mon.) Trackback() Comment(0) Java

2008
11
28

seasarについて

DI+AOPの軽量コンテナ

DIとは?
Dependency Injection(依存性注入)
DIを実現するメカニズムの概要は,オブジェクト相互の依存性をプログラム外部に記述して,実行時に結合することである。

依存性とは?
Java言語ではオブジェクトは「Javaクラス」として記述する。ここで,「A」というJavaクラスのソースコード中に,「B」を呼び出すコードが含 まれていたとしよう。このコードは,「AがBを生成し,そのメソッドを呼び出す」という内容になる。生成するためには,AはBを知っていなければならな い。つまり,Aを実行するには同時にBが必要となる。これが依存性である。

依存性の正体がオブジェクトの生成のコードであるならば,この「悪者」となっているコードを消せないか?
具体的には,Bを生成するコード(=依存性)を A本体に含めず,その実行時に動的に「注入」できないか?
この考え方が,依存性注入(Dependency Injection),すなわちDIなのである。

DIを実現するメカニズム
オブジェクトAがオブジェクトBに依存する部分を,Aのソースコードに直接記述するのではなく,間接的な方法で(メタレベルで)記述する。例えば Spring Frameworkの場合は,XML形式の設定ファイルに,AとBとの間の依存性を記述する。EJB3.0では,Java言語仕様に加わったメタデータに より,アノテーション(「@session」など,プログラム・コード中に挿入する付帯情報)として記述する。

AOPとは?
Aspect Oriented Programming:アスペクト指向プログラミング
横断的な関心事
たとえば、ログトレース。いろんなところでログトレースしたい。でもいろんなとこに書くのは無駄。
じゃAOPで、処理を分離する。横断的なロジックと関係無い処理は、アスペクトとして分割する。

静的なAOPと動的なAOP
静的なAOP:AspectJ
動的なAOP:Seasae2、Spring

バイトコードレベルでアスペクトを織り込むタイプ
   クラスロード時や実行時にバイトコード変換を用いて、アスペクトを織り込むタイプのAOPです。Seasar2はバイトコードレベルでアスペクトを織り込むタイプです。

プロキシを利用してアスペクトを織り込むタイプ
Spring

Seasar2のAOPについて
Seasar2のAOPのAdvice

Around Advice、Before Advice、After Advice、After Returning Advice
それぞれ、Joinpointの前後・前・後に実行されるAdvice。これらは独自のAdviceとして実装する必要があります。
Throw Advice
Joinpointで例外が発生した場合に実行されるAdvice。Seasar2の提供するThrowsInterceptorを継承して実装する必要があります。
その他のAdvice
Joinpointに対する機能を実装済みのAdvice。Seasar2の提供するInterceptorをそのまま利用できます。
POJOとは?ポヨ?
Plain Old Java Object
ごく普通のJavaオブジェクトであることを強調した名称。
Javaにおいてもっとも寿命が長いのは、どんなフレームワークでもない、POJOであろう。
それは「Javaである」ことしか要請しないのだから。POJOは中継層やプロセス層のような「うつろいゆくもの」に依存しない。
POJOはテストを容易にする。

2008/11/28 (Fri.) Trackback() Comment(0) seasar

2008
11
25

無題

xxx_xontroller.rb に定義しているmethod(たとえば、new)と
new.html.erbが表示されることとは関係がない?
#しかし、new method が無いと必要なインスタンスが無かったりもする。
ってことは、

rake routes でルーツを見ることができるよ。

2008/11/25 (Tue.) Trackback() Comment(0) 未選択

2008
11
25

Railsでデバッグをする7つの方法

1. p/pp
こちらはRailsに限らず良く使われている方法ですが、RailsではWebサーバをフォアグラウンドプロセスとして立ち上げた状態で使う感じになります。
   1  $ ./script/server
p/ppに慣れている人にはわかりやすくて良いと思います。

2. logger.debug
さて、続いてlogger.debugを使う方法です。
   1  logger.debug "something interesting information"
p/ppの代わりにlogger.debugを呼ぶ事で、結果がlog/development.logなどのlog/$RAILS_ENV.logファイルに書き出されます。 書き出されたファイルを、
   1  $ tail -f log/development.log
しておくと、p/ppでデバッグする時と同じような感じでデバッグ出力を見る事が出来ます。また、出力結果はlogファイルとして残っているので、後で参照する事もできます。
3. script/console
script/consoleは、実行時にデータベースの中身がどうなっているかを知りたい時に非常に便利です。script/consoleコマンドを実行すると、Railsの環境を読み込んだ状態でirbが立ち上がるので、ActiveRecordを使ってfindしたりcreateしたりdestroy_allしたり、好きなようにDBをいじる事ができます。本当に素晴らしい機能ですね。
4. script/breakpointer
script/consoleはとても素晴らしいのですが、アクション実行中のsessionの状態を調べたりするのには使えません。そんな時は、script/breakpointerを使う事ができます。
   1  $ ./script/breakpointer
まず、あらかじめbreakpointerを立ち上げておきます。続いて、状態を確認したい場所にbreakpointを仕込みます。
   1  class FooController < ApplicationController
   2    def bar
   3      # something
   4      breakpoint
   5      # something
   6    end
あとは、ブラウザからアクセスしてbarアクションを実行すると、待ち受けていたbreakpointerでirbが立ち上がるので、必要な情報を自由に閲覧・操作する事ができます。
5. better rails debugger
script/breakpointerはとても便利ですが、ステップ実行が出来ないという問題があります。 実際にステップ実行がどうしても必要という場面はあまり無いのですが、あればあったほうが便利ですね。そんな時は、ruby-debugというGemを使います。 これは前回のRails勉強会のときにyuguiさんから教えていただいた方法なのですが、まずはruby-debugをインストールします。
   1  # gem install ruby-debug
次に、ブレークポイントを仕込みます。
   1  class FooController < ApplicationController
   2    def bar
   3      # something
   4      debugger
   5      # something
   6    end
あとは、p/ppデバッグをするときのようにWebrickやMongrel等のWebサーバをフォアグラウンドで立ち上げ、目的のコードが実行されるようにブラウザからアクセスします。 すると、Webサーバのプロセス上でdebug.rb(と似たような感じのもの)が立ち上がるので、通常のrubyスクリプトを デバッグする時と同じ要領でデバッグを行う事ができます。
6. test/autotest
Ruby on Railsでは、テスト用のフレームワークがはじめから使える状態になっています。 テスト駆動開発では、テストを書いてから実装を書きますが、適当な動作検証用のコードをテストとして書くことで、デバッグに使う事もできます。この際、毎 回テストをrakeコマンドから実行するのは時間が掛かるので、ZenTestのautotestを使うのがお勧めです。 autotestを使うと、編集されたファイルに関連するテストだけを実行してくれるので、rakeコマンドを実行するよりも軽快なレスポンスが得られま す。さらにredgreenを併用すると気分良くデバッグを行う事ができるのでお勧め。
7. tail -f log/development.log&; autotest
最後に、僕が今使っている方法を紹介します。 開発用とは別に一つターミナルを立ち上げて、RAILS_ROOTで以下のコマンドを実行。
   1  $ tail -f log/development.log&; autotest
こうしておくと、プログラムやテストコードを編集した時はautotestの出力が表示され、ブラウザからアクセスした時にはロガーの出力が表示されます。 基本的に両者が同時に行われる事は無いので、一つのターミナルを有効利用する事ができておすすめ。

というわけで、Railsでデバッグを行う方法の紹介でした。

2008/11/25 (Tue.) Trackback() Comment(0) Ruby

2008
11
25

RESTfulとは

Rails 2.0 から、RESTの特徴を備えた(=RESTFulな)アプリケーションを簡単に構築できるようになりました。簡単にいうと、HTTPリクエストのメソッド (GET, POST, PUT, DELETE)とわかりやすいURIの組み合わせで機能を表現します。

例えば、Projectというデータモデルがあるとします。従来のアプリケーション(Rails 1.0系をデフォルトの設定で作ると同様になります)では、Project の一覧、詳細表示、新規作成、更新、削除のURLは、それぞれ以下のような感じになります。

Rails1.xのデフォルトのURL例

機能 URL例
一覧 GET /projects
詳細表示 GET /projects/1
新規作成画面 GET /projects/new
新規作成実行 POST /projects/create
更新画面 GET /projects/edit/1
更新実行 POST /projects/update/1
削除 POST /projects/delete/1

Rails2.0を使ったRESTFul なURLの例

機能 URL例
一覧 GET /projects
詳細表示 GET /projects/1
新規作成画面 GET /projects/new
新規作成 POST /projects
更新画面 GET /projects/1/edit
更新実行 PUT /projects/1
削除 DELETE /projects/1

2008/11/25 (Tue.) Trackback() Comment(0) Ruby

カレンダー

08 2024/09 10
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

リンク

カテゴリー

フリーエリア

最新CM

[08/09 VMAXON]

最新記事

最新TB

プロフィール

HN:
No Name Ninja
性別:
非公開

バーコード

RSS

ブログ内検索

アーカイブ

最古記事

アクセス解析

FX NEWS


-外国為替-

コガネモチ