- PR -

コンポーネント間のデータの渡しについて

1
投稿者投稿内容
sumin
ベテラン
会議室デビュー日: 2003/07/17
投稿数: 93
投稿日時: 2003-10-15 11:35
いつも勉強させて頂いてます。
EJBとかでもいいし、なんでもいいですがコンポーネントを作成した場合、各コンポーネント間のインターフェイスと言うかデータのやり取りってどうした方が一番再利用性が高く、利殖がやりやすいでしょうか?
例えば、ビジネスロジック層とプレゼンテーション層の場合、どうしてもプレゼンテーション層はビジネスロジック層から提供されるインターフェイスに合わせたデータ型を渡さなければいけないですよね?その場合、もしビジネスロジック層が変わるんだったらプレゼンテーション層の修正もどうしても必要になるのではないかと思われます。
インターフェイスを利用するデータの渡しもあり得ると思いますが、その場合ビジネスロジック層からキャストをしなければならないし。。
何かいい方法があるだろうと思われますがすぐは探せないですね。
ご意見お願いします。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2003-10-15 12:49
再利用が高そうな方法を、思いつくままに書かせていただきます。
# ほとんどヨタ

XMLでのやり取りが再利用が高そうに思えます。XMLファイルだったらJava to Javaではなくてもデータのやり取りができそうだし。しかし、データのやり取りが頻繁だとファイル変換のオーバーヘッドが気になる。
Java to Java間のやり取りであるなら、DOMというのもよさげ。org.w3c.dom.Documentでのやりとりになるので。しかし、この場合、文字列以外のデータを渡すのはどうするのだろう?また、DOMはJavaのCollectionと相性が悪いので、JDOMを選択した方がよいかも知れない。

# ちなみに私自身、Java from/to XMLの変換はMarshalling Framework(Java centric)で事足りているので、
# DOMやSAXをあまり勉強していないのが事実。
## ついでに、上でいっているMarshalling Frameworkとはjibxのことです。
## まだ、βリリースですが興味があれば触ってみてはいかがでしょう。
sumin
ベテラン
会議室デビュー日: 2003/07/17
投稿数: 93
投稿日時: 2003-10-15 13:35
ご返事ありがとうございました。
が、XMLによるデータの受け渡しは基本的に想定していません。指摘しました通り変換によるパフォーマンスのためです。純粋なコンポーネント間のやり取りの場合を想定してますけど。。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2003-10-15 14:44
unibon です。こんにちわ。

引用:

suminさんの書き込み (2003-10-15 11:35) より:
例えば、ビジネスロジック層とプレゼンテーション層の場合、どうしてもプレゼンテーション層はビジネスロジック層から提供されるインターフェイスに合わせたデータ型を渡さなければいけないですよね?その場合、もしビジネスロジック層が変わるんだったらプレゼンテーション層の修正もどうしても必要になるのではないかと思われます。


#問題の観点が分かる具体例があると良いかと思いますが、以下、想像で書きます。

広義の MVC に対応させると、「ビジネスロジック層」が M(Model) で、
「プレゼンテーション層」が V(View) になると思います。
View は Model に依存して当然なので、このような依存に伴う修正は、
原則としていたしかたないと思います。
(ちなみに逆の流れなら、
すなわち、Model は View に依存しないものなので、
このような依存に伴う問題は起きないですが。)

引用:

suminさんの書き込み (2003-10-15 11:35) より:
インターフェイスを利用するデータの渡しもあり得ると思いますが、その場合ビジネスロジック層からキャストをしなければならないし。。


上記の「インターフェイス」や「キャスト」の意味がちょっと分からないのですが、
なんらかのラッパクラスを仲介し、それが仕様の変化・変更を吸収するという感じでしょうか。

コード:
class A {
    String name; // 氏名
    double height; // 身長
    double weight; // 体重
}

class B {
    A model;
    String getName() {
        return model.name;
    }
    double getBMI() { // 肥満度
        return model.weight / (model.height * model.height);
    }
}

class C {
    setB(B);
}


でも、結局はこのラッパクラスに苦労が移っただけで、
あまり代わり映えしないです。
とは言え、上記の B が、Model と View の橋渡しを担い、
すなわち B は A から見れば View であり、C から見れば Model であり、
層を多層化しているわけであり、うまく使えば有益だと思います。

#ぜんぜん的外れかも。
Emacs信者
常連さん
会議室デビュー日: 2003/08/10
投稿数: 38
投稿日時: 2003-10-15 14:47
Mapを使うのが一番カンタンだと思います。
僕の場合は、Mapインタフェースにいくつかのプロパティを独自に追加したものを使っています。

ただ、この方法だとコンパイラの静的型チェックの恩恵を受けることができないという
デメリットもありますが。


参考:EJB Design PatternsのDataTransferHashMap

http://www.amazon.co.jp/exec/obidos/ASIN/0471208310/qid%3D1066196495/249-1214884-8514702
1

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