0

私のシナリオは次のようなものです:

メッセージの種類ごとに異なる宛先にメッセージをディスパッチするときのメッセージング システムがあります。

それが私の現在のデザインです:

Abstract class: MessageKindAbs

MessageKind1 extends MessageKindAbs  
MessageKind2 extends MessageKindAbs
MessageKind3 extends MessageKindAbs

等々..

MessageKind3は特別な種類です。その目的は、コンテンツを送信するMessageKind1MessageKind2、プロセスをログに記録することです。

だから私MessageKind3はリストの中に作成しましたMessageKind3Items

list<MessageKind3Item> MessageKind3ItemList...

MessageKind3Itemロギング目的でMessageKind1/の情報が含まれます。MessageKind2

したがって、基本的に何が起こるかというと、それぞれMessageKind3ItemにもMessageKindAbsタイプが含まれます。

しかし、それは私には意味がありません。

例: DB キューにメッセージを送信し、MessageKind1保持およびMessageKind2保持する情報をログに記録します。

そのため、私の OOP 設計は少し複雑になりました。

ここへの道を見つけるのを手伝ってくれる人はいますか?

MessageKind3Itemの別のインスタンス タイプ内に作成することもできましMessageKindAbsたが、意味があるかどうかはわかりません。

ありがとう、レイ、

4

2 に答える 2

3

ログ プロセスに送信できるすべてのメッセージにインターフェイスを実装させます。例えば:

public interface Logable {

    void logTo(PrintWriter write);
}

MessageKind3のリストを維持するだけで済みますLogablePrintWriter使用は単なる提案であることに注意してください。インターフェースの実装でロギングを容易にするために、より複雑なタイプのパラメーターが必要になる場合があります。

MessageKind3 は次のようになります。

public class MessageKind3 extends MessageKindAbs {

    private List<Logable> logables;

    //...

    public List<Logable> getLogables() {
        return Collections.unmodifiableList(logables);
    }
}

また、にはorlogablesのインスタンスが含まれているため、 が実装されています。MessageKind1MessageKind2Logable

于 2013-04-18T12:23:07.330 に答える
0

MessageKind3Item 内に MessageKindAbs の別のインスタンス タイプを作成することもできましたが、意味があるかどうかはわかりません。

できません、抽象的です。


MessageKind3 はロギング用であるため、その構造はわかっています。したがって、MessageKind3 アイテムの場合、次のようなものでインスタンス化される特別な LogItem クラスを作成します。

LogItem createLogItem(MessageKind1) {  return new LogItem(); }
LogItem createLogItem(MessageKind2) {  return new LogItem(); }

これらのアイテムを MessageKind3 に添付します。

すべてのクラスを継承で密結合しようとしていますが、これが問題です。

于 2013-04-18T12:23:08.543 に答える