ユーザーインターフェイスの部分に基づいてソースコードを構造化したことがありますか?たとえば、UIが次のもので構成されている場合:
- いくつかのプロパティを表示するためのGridView
- 3Dレンダリングパネル
- アクティブなツールを選択するためのパネル
次に、変数と関数に多かれ少なかれ次のように名前を付けてグループ化します。
class Application
{
string PropertiesPanel_dataFile;
DataSet PropertiesPanel_dataSet;
string[] PropertiesPanel_dataIdColumn;
void PropertiesPanel_OpenXml();
void PropertiesPanel_UpdateGridView();
string ThreeDView_modelFile;
Panel ThreeDView_panel;
PointF[] ThreeDView_objectLocations;
void ThreeDView_RenderView();
string ToolPanel_configurationFile;
Button[] ToolPanel_buttons;
void ToolPanel_CreateButtons();
}
これについてどう思いますか?このアーキテクチャは長期的に機能しますか?
PS。このソリューションは、Front-ahead-designエイプリルフールのジョークhttp://thedailywtf.com/Articles/FrontAhead-Design.aspxを思い出させるかもしれませんが、私の質問は深刻なものです。
編集
この種のコードを半年間維持および拡張してきました。アプリケーションはメインの.csファイルで3000行を超え、約2000行がより小さなファイル(汎用ヘルパー関数とクラスを含む)に分散されています。一般化してメインファイルから取り出す必要のあるコードの部分はたくさんあり、私は常にそれに取り組んでいますが、最終的にはそれほど重要ではありません。コードの構造と細分化は非常に単純なので、ナビゲートするのは本当に簡単です。UIに含まれる主要なコンポーネントは7つ未満であるため、デザイン全体を一度に頭に収めても問題はありません。(少し休憩した後)このコードに戻って、どこから始めればよいかすぐにわかるのはいつでも楽しいことです。
私の場合、この巨大な手続き型の構造が機能する理由の1つは、c#でのUIプログラミングのイベント型の性質にあると思います。ほとんどの場合、このコードが行うのは、このプロジェクトに本当に固有のさまざまな種類のイベントの実装です。一部のイベント関数はすぐに数ページの長さのモンスターに成長しますが、イベントハンドラー間の結合はそれほど緊密ではないため、後でリファクタリングして圧縮するのが簡単になります。そのため、他のプロジェクトがこのプロジェクトで使用するのと同じ実装部分を必要とし始めたときに、Iamは意図的に一般化とリファクタリングを残します。
PSを使用して、VisualStudioでFindNextSelection-およびFindPrevSelection-マクロを使用している3000行のコードをナビゲートできるようにします。いくつかの変数を左クリックした後、F4を押してその変数の次のインスタンスにジャンプし、F2を押して前のインスタンスにジャンプします。変数名の一部を選択して、部分的な名前の一致間をジャンプすることもできます。これらのショートカットがなければ、私はずっと前にほとんど間違いなく道に迷いました:)