SAStruts

SAStruts1.0.3-rc1 がリリースされました

今回はいくつかの重要な機能改善が施されています。 前バージョンとの変更点を効率的に把握するために、 1.0.2 から 1.0.3-rc1 までの差分ドキュメントをどうぞ。 機能リファレンス(featureReference.html) アノテーションリファレンス(annotationReferen…

S2AbstractServiceを用いたAction-Service-Logicパターン

以前に「1.5階層のAction-Service-Logicパターン」を紹介させて頂きました。今回は、このアーキテクチャにS2AbstractService を導入した場合のアーキテクチャについて検討してみました。主な変更点として、S2AbstractService を導入する場合は、アクションや…

セッションスコープのアクションフォーム内で初期化タイミングの異なるプロパティをどう扱うか?

今回、SAStrutsで用意されるセッションスコープのActionFormの削除手段(@ExecuteアノテーションにremoveActionForm=trueを指定)は、実行メソッドの正常終了時にセッションからそのActionFormを削除するというものなので、検索系の項目だけ初期化、登録系の…

アクションフォームのスコープをどう扱うか?

気になっているのはActionForm。というか、私のところでは先代から引き継いだ特殊な改造版Strutsを使っているので、SAStruts以前に、生のStrutsでActionFormをどう扱っているかよくわからない。具体的には、スコープの扱い。Formをセッションスコープにする…

アクションフォーム名は「〜Form」の方が分かりやすいのでは?

SAStrutsではFormはSmartDeplayの対象になっていません。DTOをActionのフィールドにするようなルールです。 SAStrutsの規約に従うのも良いんですが、リクエストからセットされるフィールドは全てString型にしたかったのでDTOとは区別したいです。そこでActio…

1.5階層のAction-Service-Logicパターン

趣旨とあんまり関係ないですが、Service・Logicをとりまぜた3階層にするならば、エンティティによったものをService、アクションによったものはLogicと呼んだ方が、フレームワーク側の呼び方との親和性は高いように思います。 ちなみに、今はこんな感じの設…

Action-Service-Logic の3階層は冗長か?

エンティティ固有のドメインロジックは別出しにします。 ひがさんが最近呼んでる「Service」に近いです。 でも、みなさん Action-Service-Logic の3階層は冗長ってお考えなんですね。 そうでもないですよ。今、私が携わらせて頂いている案件では、 Action :…

Entity単位のServiceに共通の親クラスを持たせる

どうにかして型パラメータからAbstractServiceのclazzへセットしたかったのですが、やり方わからず。。。 ジェネリックの部分があまりスマートなやり方じゃない気がしていますが、ひとまず以下のやり方だとOKです。 まずはジェネリックな共通親サービスクラ…

SAStrutsはなぜ大規模開発に向いているのか?

・SAStruts(+S2JDBC)はなぜ大規模開発に向いているのか? http://d.hatena.ne.jp/higayasuo/20071017/1192613847 dewa様が5月のSeasarイベントで作成されたpdf81ページから ですが、いまいちその理由が読み取れませんでした。 SAStrutsは大規模開発に強くて…

アクションフォームを使うべきか?使わないべきか?

そこでまた疑問なのですが・・・ SAStrutsのページでは、基本的にActionクラスにActionFormも同梱するのを推奨しているようですが、dewa様の図だと、DtoとしてActionFormを分離されていますよね。 これによるメリットはなんなのでしょうか? メリットは以下…

繰り返し項目の実装はDtoとEntityのどちらを使うべきか?

『複数レコード処理(繰り返し)』の場合に、Entityをそのまま使うというのに違和感を感じてしまうのですが、そんな感覚にはこだわらない方が良いのでしょうか。 導出項目を得るような処理というのはプレゼンテーションロジックなのだから、DTOに値をコピー…

続・SAStruts + S2JDBCのアーキテクチャ

ここで疑問点があります。この疑問点のため、眠れなくて早く起きてこのエントリを書いています。笑 ・ビジネスロジックをEntityとServiceに書く設計(最近流行のDDDの設計)だと思いますが、Entityのメソッドには、insertとかupdateとかdelete、かつエンティ…

SAStruts + S2JDBCのアーキテクチャを図示してみる

SAStruts と S2JDBC を使って少し複雑なケースのWebアプリを開発する際において、現時点で自分が一番良いと考えているアーキテクチャを図示してみました。 なかなか良い感じです。あえて、課題をあげるならば、次の2点です。 アクションフォームの内部クラ…

s:formのaction要素を自動的に計算

SASTRUTS-56 s:formのaction要素を自動的に計算するようにしました。 (1.0.2-rc4以降)具体的に以下のような書き方ができます。 [BEFORE] WEB-INF/view/add/index.jsp <s:form action="/add"> [AFTER] WEB-INF/view/add/index.jsp <s:form> パスからアクション名(add)を自動計算できるので</s:form></s:form>…

SAStruts入門セミナーの資料

id:morningmist7 さんが SAStruts入門セミナーの資料を公開してくれています。 SAStruts入門セミナーの資料 - Developer☆STYLE SAStrutsだけでなく、S2JDBCやSeasar 2.4、環境構築など広範囲に扱っています。 とても勉強になりました。

スケールするアクション

SAStrutsで、アクションの規模が大きくなっても、 ガタガタになりにくいであろうパターンを検討してみました。 まずは、簡単な足し算のサンプルプログラムを使って順を追って説明します。 【アクション】 アクションフォーム クラス名は、アクション名Dto。 …

特定のユースケースに関連する複数のクラスを1つのパッケージに集める

特定のユースケースへの要件が少ない場合は、 ユースケースに対応した1つのActionクラスで基本的な処理は実装できます。 しかし、ユースケースへの要件が多い場合は、扱うクラスが増えてしまいます。 例えば、ユースケース専用のDto(ActionForm)やユースケ…

全体最適か?それとも部分最適か?

原則: * 既存コードを修正することなく、機能追加を実現する o 画面が追加されても、既存のメソッドに修正が入らず、メソッド追加で対応できること o ボタン追加などイベント処理が追加されても、既存のメソッドに修正が入らず、メソッド追加で対応できるこ…

cypher256さんのSAStruts関係のエントリがすごい件

id:cypher256さんが1日で14件もSAStruts関係のblogエントリを書いています。 しかも、どのエントリのかなり示唆に富む内容なので、マジで必見です! ネストしたプロパティで入力チェック 画面部品 認証 SQL 発行 アクションの粒度 エンティティの自動生成 J…

transient を付けたプロパティ

追記: 以前に以下のようなエントリを書いてしまいましたが、 transient を付けたプロパティは、HOT deployとCOOL deploy で 挙動が違うことが判明したため、使わないこと強くを推奨します。 混乱させてしまって、スミマセン。 挙動から判断するに、HOT depl…

普段私がコードを書く時に気を付けていること

普段私がSAStrutsでアクションのコードを書く際に 気を付けていることをまとめてみました。 原則: 既存コードを修正することなく、機能追加を実現する 画面が追加されても、既存のメソッドに修正が入らず、メソッド追加で対応できること ボタン追加などイベ…

ネストした子のバリデーション

ネストした子Dtoのバリデーションはやってくれない?とりあえず検証メソッドかな。 私も以前に確認したのですが、 アノテーションによるネストした子Dtoのバリデーションは、 複雑なことは対応しないという方針に基づいて、 やってくれないのが仕様です。 あ…

Actionクラスの肥大化対策

アクションクラスのサイズが有る一定行を超えたら、 そのアクションと 1対1の抽象親クラスを作成して、 publicメソッド以外をその抽象親クラスへ移動してしまうアイデアはどうだろうか。

Teedaのページ駆動開発のように実装してみる

1html = 1Page、ユースケース=ディレクトリ という分かりやすいTeedaのページ駆動開発をSAStrutsで挑戦してみました。 SASturtsの場合は、1html = 1Pageではなく、1JSP = 1Actionですね。 今回は、pageという名前のユースケースを想定してみました。 作成し…

SAStruts + S2JDBCによるSeasar2ハンズオンセミナー

先週の金曜日にあるSIerさん向けに 「SAStruts + S2JDBCによるSeasar2ハンズオンセミナー」 と題した研修の講師をさせて頂きました。 参加して頂いた方は、どうもお疲れ様でした。

アクションの粒度はページの方が良さげ?

アクションの粒度はユースケースなので、 ちょっと規模大きくなるとソースコード量がわりとすぐに肥大化してしまう。 肥大化すると、いろいろと面倒なので、分かりやすさも考慮すると、 アクションの粒度はTeedaと同じページ単位の方が良い気がしてきた。 (…

アクションの配列プロパティを指定の文字で連結する

[Action側] public String[] hoge = {"aaa", "bbb", "ccc"}; [JSP側] ${fn:join(hoge, '=')} これは、正しく動作しませんでした。理由は、以下のSeasar MLのひがさんの説明を参照。 ActionやActionFormのプロパティは、 publicフィールドを ELやStrutsが参照…

大企業とSAStruts

自前で持っているフレームワークの代わりに SAStrutsを導入する大企業が今後は増えると予想してみる。

アクションがアクションフォームになる

まさに「忍法身代わりの術」。 SASturtsのアクションは、自分自身のプロパティにアクションフォームが 存在しなければ、自分自身がアクションフォームとして振舞うようです。 > Thanks id:jflute さん なるほど。だから、アクションに定義したプロパティが …

プロジェクトマネージャにとってのSAStruts

SAStrutsでコードを書く時に、よくStrutsのリファレンスを活用します。 SAStrutsとStrutsのアクションクラスのソースコードは見た目が全然異なるだけに、 Strutsの知識が活用できてしまうのは、不思議な感覚です。 改めてSAStrutsがStrutsの薄いラッパーフレ…