2004-06-01から1ヶ月間の記事一覧
SpringにAspectJを統合 本家のSpringframeworkのメーリングリストにて、ロッドジョンソン氏による、SpringとAspectJの統合についてのメールが流れた。 SpringのAOPは使いにくいと思っていたので、AspectJとの組み合わせは、 良いアイディアだと思う。 ただ、…
アフォなコードを書く人はそれをアフォなコードだと思っていない事が多いハズなんです。で、それはアフォなコードだよって教えてあげても猛烈な反発が ダイコン時代では、インターフェースと実装が分離され、 設計の段階でインターフェースがきっちり決まっ…
アジェンダ からさわぎOpening ダイコン白書(導入編) ダイコン白書(基本編) ダイコン白書(AOP編) ダイコン白書(アーキテクチャ編) ダイコン白書(開発手法編) で考えてます。 開発手法編が今回の目玉で、日記で書いたことをもう一度まとめなおしたい と思って…
1:NはS2Daoとして実装し、必要のない人は使わなければ良いし、 必要のある人は使えば良いんだと考えることにしました。 ニーズがあることには対応します。 実装案は考慮中。 以下の例はDepartmentにemployeesというプロパティがある場合です。 public static…
1:N はどう実装するのが正しいのだろう? エンティティ型に ASPECT して、N の DAO 呼ぶ? 1:Nは、N側のDaoを呼ぶでいいジャンと思ってるのだけど、だめかしら。 クライアントで、N側のデータを必要とするとき、クライアント側で SQLが発行されないように、…
S2.0.10 http://prdownloads.sourceforge.jp/seasar/10039/S2.0.10.jar リリースメモ MockInterceptorを追加しました。 修正点 setHoge(int),setHoge(String)などのような場合に、プロパティと認識しないようにしました。 S2DataSetでbyte[]の比較に失敗して…
これからリリース準備に入ります。
これからexampleとマニュアルの作成に入ります。
オブジェクト指向やモデリングの本でこのような文章をみたことがないだろうか。 クラスを抽出するためには、ユースケースから名詞、動詞を まず抽出します。名詞はクラス・属性の候補になり、 動詞は操作や関連の候補になります。書いてあることは間違ってな…
S2Dao EA1のリリース予定は、6/26 or 6/28,29,30のいずれかになる予定です。 機能としては、2Way SQL(コメントによる動的SQLを含む)までで、 SQLの自動生成はこの後のバージョンでの実装になります。 コメントによる動的SQL static定数によるアノテーション …
ほぼ、クラス図不要論とおなじなのですが、自分の意見を書いておきます。 ドメインをデータと振る舞いの点から考えてみたいと思います。 データはどのように永続化するのかが最も重要です。 RDBMSを使う限りはRDBMSに適したようにモデリングしたほうがいい。…
これは、UI仕様書(Validationつき)とエンティティ仕様書とを明示的に関連づけてしまい(一枚にできないか)、バウンダリからサービスを経由しないで(デザイン的にはスルーして)S2Daoをたたくことで実現できる(Excelでうんぬんを突き詰めたい)。 これまで…
バウンダリに関しては、UI層のフレームワークに合わせた 内部設計書を作成します。 とりあえず、必要だと思われるのは、UI層のコントローラ (例えばStrutsのAction)のコンポーネント定義です。 UI層のコントローラは、ロジック層のクラス(interface)に依存し…
外部設計のインプットデータは、業務フローです。 業務フローごとに外部設計を行います。 ユーザにレビューしてもらえるのは、外部設計まで。 気合を入れます(笑)。 業務フローの中で、既にバウンダリが洗い出されているはずなので、 それらをもとにロバスト…
ダイコンの守備範囲は、外部設計以降なのですが、外部設計をするために 最低これだけは必要になるだろうと思うものを書いておきます。 逆にいうとこれらが決まらずに外部設計にはいっても、 結局待ち状態に入り、プロジェクトは迷走をし始めるでしょう。 デ…
http://www.javagen.com/petstore/ を例に考えてみます。 私は正直言うと http://examples.macromedia.com/petmarket/store.htmlのほうしか しらないので細かいところは若干異なるかも。 最初は、「カテゴリを表示する」です。 5つの動物がカテゴリです。 最…
FDDはFeature Driven Developmentの略でシステムがユーザに提供する価値を Feature(ユーザ機能)に分解してユーザ機能ごとに開発していきます。 ユーザ機能とはで表現されるものです。 なんじゃいそりゃー。VO(動詞 + 目的語)。「〜を〜する」で表現される も…
http://d.hatena.ne.jp/akon/20040620#p3やそのコメント http://d.hatena.ne.jp/higayasuo/20040620#1087744106 http://d.hatena.ne.jp/habuakihiro/20040621#1087747725 とやり取りしていたのですが、お互いいってることが微妙にずれる。 ユースケース、FDD…
S2Daoではエンティティのクラスを作成するために2つの方法が提供されます。 Excelにテーブル定義を書いて、DDL, エンティティのソースを書き出す。DDLを直接データベースに適用することも可能。 作成済みのテーブルのメタデータよりExcel、エンティティのソ…
ユースケースの管理単位は、画面系なら関連のある複数の画面の組み合わせ、 帳票系なら1帳票、バッチ系ならジョブネット。 ユースケース単位に、ロバストネス分析を行って全体構造を把握します。 ロバストネス分析を行うときにもっと重要なのがコントロール…
従来のオブジェクト指向では、クラス・継承・多態性などを学んでも、 結局、実プロジェクトにどうやって活かしたらよいのか、 よくわからないというのが実情だったのではないでしょうか。 デザインパターンなども実際のコードに生かせるのは、 業務システム…
ここでいう作業待ちとは、前工程が決まらないために 後工程の人が遊んでしまう状態のことです。 作業待ちが起こると工数的なダメージがあるばかりではなく、 開発者のモチベーションも下げてしまいます。 仕様と実装を明確に分離し、仕様を先につめるように…
ユースケースが正しいことを検証する、あるいは さらに詳細な設計をする前の準備として、 ロバストネス分析は役に立つと思います。 ロバストネス分析とはユースケースの登場人物を バウンダリ、コントロール、エンティティに分類して その関連を分析するもの…
UI層のコントローラは、コントローラのコントローラ (StrutsのActionServletなど)とユースケース固有のコントローラ (StrutsのActionなど)があると思います。 ここで取り上げるのは、ユースケース固有のコントローラです。 コントローラの役割は以下のような…
アドバイスをふまえ次のように考えてみました。 interface Hello { public String greeting(); } <component name="helloMockInterceptor" class="org.seasar.framework.aop.interceptors.MockInterceptor"> <property name="value">"Hello" </component> <component class="Hello"> <aspect>helloMockInterceptor</aspect> </component>戻り値はvalue…
UI層は、自動テストは行わない。目視でのテスト。 これまでの経験だとUI層のテストを自動化しようと すると、労力の割にはえるものが少ない。 テストのために必要なサービス層の実装は、MockInterceptorで 組み込みましょう。 サービス層は、もちろん自動テ…
テストのためのモックの作成すらも不要にするMockInterceptor。 例えば次のようなインターフェースがあるとします。 interface Hello { public String greeting(); }テストのためのダイコンファイルを定義します。 <component class="Hello"> <aspect> <component class="org.seasar.framework.aop.interceptors.MockInterceptor"> <arg>"Hello" </component> </aspect> </component>MockIntercep…
S2Daoは、O/Rマッピング(ORM)の部分とDAO(SQLの自動・手動生成)の部分に 分かれるのですが、そのうちORMの部分はS2JDBCに組み込まれます。 S2Daoの機能としてアナウンスしていたフィールドメタデータは、 S2JDBCレベルで利用可能だということです。 これまで…
RC2にしたらきちんと動くようになりました。 M9では動かないような気が。 以下報告。 property,argなどのバリデーションで、 longのものにintの値を割り当てるときにProblemになります。 ほんとは大丈夫なはず。 OGNLの@examples.jdbc.Employee@classがうま…
「Don't call us. We'll call you.」 ダイコン時代になると役者がプロデューサーを呼び出さないのは もちろんのこと、プロデューサーも役者を直接呼び出したりはしません。 企画書(ダイコン定義ファイル)に書いてある役(インターフェース)を 演じる(実装する…