私はアプリケーションを作成するときに、静的メソッドとプロパティを含む静的クラスを作成します。静的メソッドとプロパティは、どこに配置するかわかりません。
それは特に良いデザインではありませんが、それはポイントの一種です。それは私がまだ考え出していない設計決定の全クラスをローカライズする場所を与えてくれます。一般に、アプリケーションが成長し、リファクタリングによって洗練されるにつれて、これらのメソッドとプロパティが実際に存在する必要がある場所が明確になります。忠実に、リファクタリングツールの状態は、これらの変更が通常は例外的に苦痛を伴うことではありません。
私は他の方法でやってみましたが、他の方法は、オブジェクトモデルを適切に設計するための十分な知識を得る前に基本的にオブジェクトモデルを実装することです。私がをとすると、私はかなりの時間とエネルギーを費やして、いつか再考して、ある時点で再構築しなければならない平凡な解決策を思いつきます。さて、私がこのコードをリファクタリングすることを知っていれば、本当にうまくいかない不必要に複雑なクラスを設計して構築する手順をスキップするのはどうですか?
たとえば、複数の顧客が使用しているアプリケーションを作成しました。私はかなり早い段階で、異なる顧客のために違う方法で作業する必要がある方法を分離する必要があることを理解しました。カスタマイズされたメソッドを呼び出す必要があったプログラムのどこかで呼び出し可能なstaticユーティリティメソッドを構築し、静的クラスにスタックしました。
これは数か月間うまく機能しました。しかし、それはちょうど醜く見えるようになった時点になった。そして私はそれを自分のクラスにリファクタリングすることに決めました。そして、このメソッドが呼び出された場所をすべて見てコードを調べると、カスタマイズされたメソッドはすべて抽象クラスのメンバーになる必要があり、顧客のアセンブリは単一の派生クラスすべての抽象メソッドを実装し、アセンブリと名前空間の名前を設定から取得し、起動時にカスタムフィーチャクラスのインスタンスを作成するだけで済みました。カスタマイズしなければならないすべてのメソッドを見つけることは本当に簡単でした。なぜなら、私がする必要があったのは、私のロード・カスタム・フィーチャーメソッドが呼び出されていたすべての場所を見つけることだったからです。午後には、コードベース全体を理解し、この設計を合理化するために、より良い部分がありました。最終結果は、本当に柔軟で堅牢で、正しい問題を解決します。
私が最初にその方法を実装したとき(実際には3つまたは4つの相互関連する方法でした)、それは正しい答えではないと認識しました。しかし、正解が何であるかを決めるのに十分なことは分かりませんでした。だから私は正しい答えが明らかになるまで、最も単純な間違った答えを出しました。
質問は、JavaではなくC#についてです。とにかくStringクラスは.NETとJavaの両方で封印されています( –