私は自分のシステムにコマンドパターンを実装しました。なぜなら、私はいくつかの層を持っており、ロジックを遠隔から呼び出す必要があるからです。コマンドパターンの醜い経験:OOPの任意の点?
class DoWorkCommandMessage { int param; }
class DoWorkCommandHandler : Handler<DoWorkCommandMessage>
{
Execute(MyObject object) {
object.DoWork(message.param);
}
}
class MyObject
{
void DoWork(int param) {
_proxy.SendMessage(new DoWorkBinaryMessage(param));
}
}
あなたは、私は基本的に、別の階層に送信されるメッセージに戻ってそれを変換されたメソッド呼び出し、に変換、メッセージを取得しています見ることができるように。
ここに何か問題があるように感じます。
私はすべてのメソッドを削除するためにMyObjectをリファクタリングし、単純なProcessMessageメソッドに置き換えました。このメソッドは、メッセージを受け取り、それを翻訳し、ディスパッチします。
これは)私がProcessMessageを(呼び出して維持する必要がありますユニットテストのために... MyObjectには、主にちょうど変換コードではなく、「オブジェクト」は終わった以外
OKだった代わりに簡単なメソッド呼び出しを作ります。
「メッセージ&の変換」と「メッセージ - >方法 - >メッセージ」の対戦のこの戦いについて、私は考えています。明らかにメッセージとメソッドは非常に密接に関連しています。
MyObjectで動作やロジックを使用できないのはなぜですか?あなたの "MyObject"は、プロキシとして立つのではなく、より具体的で、何らかのロジックを実行できますか? – Thurein
MyObjectは実際には、フィールド内のハードウェアのビットを表す「オブジェクト」です。サーバーには、このようなオブジェクトが多数あります。これは、数千のハードウェアデバイスが現場に存在するためです。実際のハードウェアデバイスは、ほとんどの状態を保持し、メッセージを送信し、本質的にサーバーに最新の状態をキャッシュします。私はこのデバイスをOOPのようにモデル化するのか、それとも気にしないのかについて断ち切っています... Unitテストではその方法が良いとテストします。それ以外の場合は全く使われません。 – Schneider
これは常にあなたが達成しようとしていること。あなたの場合は、あなたがそれを必要としなかったようです。 – ivowiblo