0

私は問題があります。私は VSTO C# を使用しており、MailItem オブジェクトと AppointmentItem オブジェクトを使用しています。現在、私は本質的に同じであるそれぞれのクラスを持っています。唯一の違いは、MailItem クラスがそのロジックで MailItem オブジェクトを使用し、同じことが AppointmentItem にも当てはまることです。

これらのクラスをどうにかして「マージ」したいので、維持する必要があるコードは 1 つだけです。ここに私が試したいくつかのオプションがあります:

  • オーバーロードを使用してみましたが、それでも 2 つの関数になるため、以前とほぼ同じシナリオです。

    「動的」パラメーターを使用して単一のメソッドを作成しようとしましたが、Linq を使用すると構文エラーが発生しました。

    最後に、var を使用してみましたが、if-else ステートメント内で宣言する必要があり、スコープがそこでスタックしているため、役に立ちませんでした。

これが可能かどうか、誰にもアドバイスがありますか?

前もって感謝します!

4

1 に答える 1

0

厳密な型付け規則のために、言語でアルゴリズムの個別の実装が必要になる場合があります。このような場合にできる最善の方法は、ドキュメントでアルゴリズムの設計が同じであることを発表し、将来的にその並列性を維持することを確認することです。

ただし、リファクタリングの世界では、共通のスーパークラスだけがこれを行う方法ではありません。Martin Fowler の著作 ( http://refactoring.com/ ) を強くお勧めします。

これをどの言語で実装しているかは明言されていないので、これは静的に型付けされた言語であり、Smalltalk のようなものではないと推測します。ビジター パターンを検討することもできますが、2 つのクラスだけではやり過ぎかもしれません。デリゲート パターンまたはプロキシ パターンも機能します。

Proxy、Facade、Adaptor の便利な比較ページを見つけました: http://www.netobjectivestest.com/PatternRepository/index.php?title=AdapterVersusProxyVersusFacadePatternComparison

于 2013-06-02T13:19:37.423 に答える