1

ABAP/BSPでコーディングされたWebアプリがあります。細かいコードを提供することに興味があるので、良いパターンまたは悪いパターンを認識するのに役立つかもしれません。実際に私は以下を行います。基本クラスオブジェクトを宣言し、サブクラスを持つパラメータに基づいて動的にインスタンス化します。基本クラスには、データをフェッチするためのいくつかのメソッドがあります()サブクラスはこのデータを使用し、場合によってはそれを操作します。

ここにいくつかの速い基本的な絵があります(申し訳ありませんが、それが標準や言語に準拠しているとは思わないが、あなたにアイデアを与えるはずです)

代替テキストhttp://img35.imageshack.us/img35/4351/designkdp.jpg

このようなものは大丈夫ですか?隠されている既知のパターンはありますか、それともパターンをリファクタリングして使用する必要がありますか?私はここにいくつかの提案が好きです。ウィキペディアの記事をすでに読んだことがありますが、パターンが正確に一致していません。(また、いくつかの本を注文しましたが、皆さんは確かに速いです:))

4

4 に答える 4

3

ファクトリメソッドのようです

于 2009-06-18T14:32:56.490 に答える
1

BaseClassとSubClassesは、(擬似コード)のようなものを持っているように私には思えます

interface IDataProvider{
  GetData();
}

class SubClass1 implements IDataProvider{
  GetData(){
     ...
  }
}

使用するインスタンス化戦略は、ファクトリのように機能するようです。できることは、プレゼンテーションを残りのロジックから切り離すために、HTMLRenderingEngineなど(ABAP / BSPに精通していない)でレンダリングをレイアウトすることです。

于 2009-06-18T14:37:12.800 に答える
1

これは、Gamma、Helm、Johnson、Vlissidesの著書「DesignPatterns:Elements of ReusableObject-OrientedSoftware」のファクトリパターンです。

于 2009-06-18T14:36:23.597 に答える
0

継承は楽しいものですが、最後の手段として使用する必要があります。あなたがしたようにできないと言っているのではありません-あなたの解決策は完全に有効ですが、代替案を提案するだけです...

processData オブジェクトを設定できる (または設定できない) "DataClass" があるとしたらどうでしょう。processData オブジェクトは、実際には単一のメソッド「processData」を持つインターフェースになります。

getData を呼び出すと、次のようになります。

if(processDataObject == null)
    return getInformation();
else
    return processDataObject.processData(getInformation());

何もしない「パススルー」processData オブジェクトが定義されていて、それをデフォルトの「processDataObject」として使用する場合、getData メソッド全体は次のようになります。

return processDataObject.processData(getInformation());

これにより、クラスを動的に作成して、必要なあらゆるタイプの処理を実行できます。これにより、この設計の上に構築するものが簡素化されます。

このスタイルの設計に慣れるのにしばらく時間がかかりました。最初は継承を避けるという考えが気に入らないかもしれません。考えてみてください。最近では、継承を使用することはほとんどありません。使用するときは、常に非常に浅いツリーで行います。

于 2009-06-18T15:53:01.800 に答える