2

これは C# の質問ですが、実際には言語に依存しない可能性があります

私は大規模なオブジェクト モデル (100 以上の型) を継承しました。オブジェクトの階層は、0..n の他の型指定されたオブジェクトをすべて「所有」し、すべてがベースを共有します (「相対的に」厳密な型階層がある場合)。

継承によってこれらのオブジェクトの分離を開始し、IoC ベースのシステムをまとめて、現在存在するよりも深いユニット テストの実装を開始したいと考えています。

どこから始めるのが最適ですか?

階層の最上位から始めることができます。これは非常に単純ですが、最初のメリットが最も少なく、チェーンのさらに下に到達するまでは非常に単純です。完全なカバレッジが得られるまで、関数シグネチャをオーバーロードして基本インターフェイスを受け入れます。

階層の一番下から始めることもできますが、それははるかにトリッキーです。なぜなら、そこにはクラス間の相互作用がたくさんあるからです。

ベース オブジェクト (すべてのオブジェクトが継承するオブジェクト) から開始することもできます。これにより、論理的なポイントでプロセスが開始されますが、すべてのオブジェクトの継承と関数呼び出しを交換するまで、ほぼ確実にコンパイルできないアプリケーションが作成されます。 .

何かご意見は?

4

4 に答える 4

2

妥当な時間内にプロセス全体を完了することができる場合は、ベースから始めて、すべてを実行します。あなたが完了するまで、アプリは壊れます

それまでアプリを動かし続けなければならない場合は、一番上から始めて、一度にいくつかのクラスを下っていきます

ボトムアップの観点も見ていきますが、すべてを壊し、他の2つのアプローチよりも時間がかかる可能性が高いため、実装する実用的な方法になるとは思えませんが、マイレージは異なる場合があります;-)

基本的な質問は次のとおりです。

  • 各アプローチにはどのくらいの時間がかかりますか?
  • 各戦術は、最終的に同じ最終コードを生成することになりますか?
  • 変換が完了している間、アプリを動作させ続けることはどれほど重要ですか?
  • 大規模なリファクタリングを信頼するのに十分な単体テストがありますか?
于 2008-12-05T05:05:13.057 に答える
1

これは少し学術的すぎるかもしれませんが、1990 年代半ばに、たとえば一般的に使用されるインターフェイスを見つけ出すなどして、大規模なクラス階層を自動的にリファクタリングする方法について多くの研究が行われました。これで問題が解決しない場合もありますが、どこから始めるべきか、または少なくともこの種の問題について興味深い視点の良い選択肢を提供してくれるかもしれません。

その連鎖の最初の論文は、Godin と Mili の「Galois Lattices を使用した分析レベルのクラス階層の構築と維持」(Google で検索すると PDF が見つかります) であり、次の一連の論文全体がありました (これを引用した論文を参照してください)。さまざまなトリック。

于 2008-12-05T05:05:45.457 に答える
1

上から始めて、下に移動するにつれて継承の代わりに委任を使用して、より小さな階層を作成します。戦略パターンを使用して、階層内のクラスから動作を削除します。

于 2008-12-05T05:06:29.853 に答える
1

私は言うだろう

  • 既存の設計をよく見てください.. アプローチを策定してください. コンピュータを使って試してみてください. (Kent Beck のガイドライン.. 設計に関する議論は、それを超えてはなりません. 30 分. バリアにぶつかったら、マシンをつかみ、それをコーディングして、それが機能するかどうかを確認してください.)
  • 1 時間 (好みによってはそれ以上) のタイムボックスが経過した後、進歩していると感じたら... 持続します。そうでなければ、製図板に戻ります。

始めましょう...方法を見つけようとしてBDUFの時間を費やす代わりに..それは解決します. もちろん、優れたATのセーフティネットを持つことは不可欠です.

于 2008-12-05T06:44:53.103 に答える