3

クラスのセットが「スパゲッティ コード」であるかどうかを判断するにはどうすればよいですか?

Visual Studio の [アーキテクチャ] メニューで依存関係グラフを生成するときに、自分のコードをスパゲッティとして見る必要がありますか?

クラス間の依存関係の量を減らそうとすることで、スパゲッティ コードの問題を常に回避しています。そうすることで、確かにディペンデンシー グラフがきれいになります。また、ある部分を変更する場合、クラス間の依存関係がほとんどないため、他のクラスを台無しにする心配がありません。

しかし、この方法を実行すると、コードを繰り返さなければならないように見えることがあります。たとえば、次のオブジェクトをリストに格納できます。

class DataBlock {
   public int id;
   public string name;
   public SomeObject dataObj;

   public Object[] Data1 { get { return dataObj.RetrieveInfo(); } }

   public Object[] Data2 { get { return dataObj.SomeProperty; } }

   public bool DoCompare(obj) { ... }
}

したがって、上記のオブジェクトを構成DataListするタイプのと呼ばれるリストがあります。List<DataBlock>

次に、 からの情報を含むイベントをディスパッチするとしますDataBlockDataBlockこのオブジェクト全体を に含めることができますEventArgs。ハンドラー関数はこれを行うことができます:

void Handler(MyEventArgs evtArgs) {
   DataBlock data = evtArgs.Data;
   var firstData = data.Data1;
   data.Data2;
   firstData.DoCompare(data.Data2)
   data.name;  //etc, etc
}

これは便利です。ただし、これは、このハンドラーを持つクラスがオブジェクトに依存するようになることも意味しDataBlockます。したがって、これを取り除く私の方法の 1 つは、私の 内にあります。次のように、からのすべての情報EventArgs繰り返します。DataBlock

class MyEventArgs : EventArgs {

   public MyEventArgs(id, name, data1, data2) {
      ID = id;
      Name = name;
      Data1 = data1;
      Data2 = data2;
   }
   public int ID { get; private set; }
   public string name { get; private set; }
   public Object[] Data1 { get; private set; }
   public Object[] Data2  { get; private set; }
}

EventArgsmy をこのように配置することにより、 myEventArgsとイベントHandlerを持つクラスの両方が に依存しなくなりDataBlockます。イベントの発火者だけが について知っておりDataBlock、データを から取り出して、コンストラクターを介してDataBlock入れます。MyEventArgsただし、現在、これの問題は、MyEventArgsが内にあるすべてのゲッター/セッターを繰り返しDatablockていることです。また、 !内のすべてのヘルパー メソッドにもアクセスできなくなります。DataBlock

これは、私がよく直面する問題のほんの一例です。依存関係を減らしたいという理由だけで、いくつかのクラスのゲッター/設定を繰り返していることに気付いた、より深刻なものがあります。

ディペンデンシー グラフに多くの矢印が表示されるその他の問題は、たとえば、 というインターフェイスがある場合ISomeObjectです。はクラス内でよく使用されるオブジェクトであるためISomeObject、インターフェイスはクラスの他の多くの部分で使用されます。最後に、 を指す矢印がたくさんありISomeObjectます。これはスパゲッティ コードも意味するのでしょうか?

コードを整理しておきたいときに直面する問題を説明するのは難しいです。しかし、上記の例が、私が伝えたいことを説明するのに十分であることを願っています.

では、このようなシナリオのベスト プラクティスは何ですか? Visual Studio の Dependency Graph であちこちに乱雑な曲線の矢印が多数表示されている場合、自分のコードがスパゲッティであると判断する必要がありますか?

4

2 に答える 2

1

NDependホワイトブックとドキュメントを読むことをお勧めします。

ここでコード構造、設計、依存関係のセクションを見てください: http ://www.ndepend.com/Tips.aspx#Design

于 2012-10-22T06:22:41.137 に答える
1

スパゲッティコードは、依存関係やそのような高レベルのものに結び付けられたものではないと正直に信じています。

スパゲッティ コードは、順序がなく完全に不合理な高度に結合されたコードを作成するアンチパターンです。つまり、作成者 (プログラマー) はコード フローをほとんど説明しません。

スパゲッティ コードの最も重要な症状の 1 つは、保守が困難になることです。バグを修正すると、1 つまたは複数のバグが作成されます。これらのバグを修正すると、さらにバグが発生します。そして最後に、コードはどこでもガベージをハードコーディングすることで修正されます。

繰り返しになりますが、多くの依存関係を持つ大きなオブジェクト グラフが「スパゲッティ コード」になるとは思えません。

于 2012-10-22T06:51:45.467 に答える