- PR -

ビジネスロジックの設計

1
投稿者投稿内容
ぼら
会議室デビュー日: 2003/09/11
投稿数: 6
投稿日時: 2003-11-04 22:19
現在Struts1.1を利用したいと思っているのですが、
以下のように設計方針で悩んでいます。

「ビジネスロジックはフレームワークに依存したくない。
 けど、ActionFormの入力値やMessageResourcesの例外メッセージは
 使いたい。いっそのこと間にインターフェースをかませるか?
 もしくは素直にStrutsに依存した作りにするべきか…」

ビジネスロジックでStrutsの機能を使いたい時、
皆さんはどのように解決しているのでしょうか?
それともStrutsのクラスを渡すのが普通なのでしょうか?
お聞かせ願えませんか?
Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2003-11-05 19:13
ビジネスロジックでActionFormの入力値をとりたいのであれば、普通にActionFormを引数にするのがいいでしょう。ActionFormの構造は単純なJavaBeanですから、大きくフレームワーク依存とはいえないはずです。もし気になるようであれば、ActionFormからGetter、Setterをインターフェースとして分離し、それ経由でActionFormを利用すればいいでしょう。Eclipseにはインターフェース抽出機能が存在しています。
また、MessageResourcesについては直接ビジネスロジックから利用しないほうがいいと思います。メッセージ取得はビジネスロジックからよく利用されますし、ステートレスに利用したいでしょうから、独自にメッセージ管理クラスを提供するのがいいと思います。Strutsとメッセージを共有したいのであれば、メッセージ管理クラスの背後にMessageResourcesを配置する形にしておけば問題ないでしょう。
ビジネス層実装のコツとしてはプレゼンテーションロジックと分かれた別サーバーで実行されることを意識して設計することです。実際にはほとんどのケースで同一JVMで実行されますが、あとでEJBなどの技術を利用したい場合に容易に移行が可能になります。
あら
会議室デビュー日: 2003/10/03
投稿数: 8
お住まい・勤務地: 札幌
投稿日時: 2003-11-05 19:16
始めまして、ぼらさん。

私はビジネスロジックでStrutsの機能を使わないようにしています。

例えば、ActionFormの入力値については、ActionFormとは別なValueObjectを作っています。
Actionクラスで、ActionFormからValueObjectに値をコピーし、、ビジネスロジックに対して引数としてValueObjectを渡す感じです。

普通なのかどうかはわかりませんが・・・
あら
会議室デビュー日: 2003/10/03
投稿数: 8
お住まい・勤務地: 札幌
投稿日時: 2003-11-05 19:15
始めまして、ぼらさん。

私はビジネスロジックでStrutsの機能を使わないようにしています。

例えば、ActionFormの入力値については、ActionFormとは別なValueObjectを作っています。
Actionクラスで、ActionFormからValueObjectに値をコピーし、、ビジネスロジックに対して引数としてValueObjectを渡す感じです。

普通なのかどうかはわかりませんが・・・
ぼら
会議室デビュー日: 2003/09/11
投稿数: 6
投稿日時: 2003-11-06 21:21
>ビジネス層実装のコツとしてはプレゼンテーションロジックと分かれた
>別サーバーで実行されることを意識して設計することです。

EJBといえば、EclipseのJBossプラグインで生成されたソース見て眩暈がした覚えが…(汗)

とりあえずEJBは置いとくとしても、ActionFormはインターフェース越しに使い、
メッセージはStrutsとの共有は諦めて独自の管理クラスを作ることにします。
データベースとの遣り取りはTorqueあたりを検討してみようかと思います。

Anthyhimeさん、あらさん
貴重なご意見ありがとうございました。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2003-11-08 14:42
引用:

ビジネスロジックでStrutsの機能を使いたい時、
皆さんはどのように解決しているのでしょうか?
それともStrutsのクラスを渡すのが普通なのでしょうか?
お聞かせ願えませんか?



ビジネスロジックはStrutsに依存しないCommandパターンで実装し、StrutsのActionForm
などからそのCommandオブジェクトを構築するBuilderクラスを作る、というのはどうですか?
完全に分離するとすれば、Commandオブジェクトからの実行結果をActionFormオブジェクトに
コピーする処理も必要なので、そこまでする必要があればですが…

メッセージに関しては、完全に分離したほうがよいでしょう。そもそもビジネスロジック
クラスでは画面出力用のメッセージではなく、ログ出力でしょうから、共有する必要はないと
思います。
Emacs信者
常連さん
会議室デビュー日: 2003/08/10
投稿数: 38
投稿日時: 2003-11-08 18:22
ちょうど、このへんの話が「実践J2EEシステムデザイン」の12章で議論されています。
一読されてみてはいかがでしょうか。

筆者の結論としては「ActionFormの手法は、洗練されてないのでダメ」
だそうです。

まぁ、使うのがDynaActionFormか普通のActionFormかによって、
結論は微妙に異なるとは思いますが。

DynaActionFormにはgetMapというメソッドがあるので、フォームの内容を
すぐにStruts非依存のMapに変換できて便利ですよ。
1

スキルアップ/キャリアアップ(JOB@IT)