gpt4 book ai didi

c# - 我如何确定或判断一组类是否为 "spaghetti code"?

转载 作者:行者123 更新时间:2023-11-30 17:09:21 25 4
gpt4 key购买 nike

我如何确定或判断一组类是否是“意大利面条代码”?

当我在 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>由上述对象组成。

然后现在,假设我要发送一个事件,其中将包含来自 DataBlock 的一些信息.我可以包括整个 DataBlock对象进入 EventArgs .处理函数然后可以这样做:

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

这很方便。但是,这也意味着具有此处理程序的类现在将依赖于 DataBlock。目的。所以,我摆脱这个的方法之一是在我的 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; }
}

通过安排我的 EventArgs这样,我的EventArgs以及举办事件的类(class)Handler不会依赖 DataBlock .只有事件的发起人知道 DataBlock它从 DataBlock 中提取数据并将它们放入 MyEventArgs通过它的构造函数。然而,现在的问题是,MyEventArgs 重复 Datablock 中的每个 getters/setters . 而且,我也无法访问 DataBlock 中的所有辅助方法。 !

这只是我经常遇到的一个问题的一个小例子。在更严重的情况下,我发现自己重复了几个类的 getters/settings,只是因为我想减少依赖性。

我遇到的其他问题在依赖关系图上显示了很多箭头,例如,当我有一个名为 ISomeObject 的接口(interface)时.因为ISomeObject是类中的流行对象,接口(interface)被类的许多其他部分使用。最后,有大量箭头指向 ISomeObject .这是否也意味着意大利面条代码?

当我想让我的代码井井有条时,我很难解释我所面临的问题。但我希望上面的例子足以说明我想说的。

那么,对于这种情况,最佳做法是什么?当 Visual Studio 中的依赖关系图显示大量凌乱的弯曲箭头指向各处时,我是否应该确定我的代码是意大利面条?

最佳答案

老实说,我相信 spaguetti 代码与依赖项或此类更高级别的东西无关。

Spaguetti 代码是一种反模式,它包含创建没有顺序且完全不合理的高度耦合代码,这意味着作者(程序员)几乎不会为您解释代码流。

意大利面条代码最重要的症状之一是它无法维护:如果您修复一个错误,它会产生一个或多个错误。当你修复这些错误时,你会得到更多的错误。 最后代码通过硬编码到处都是垃圾来修复。

同样,我怀疑具有大量依赖关系的大型对象图是否会是“意大利面条代码”。

关于c# - 我如何确定或判断一组类是否为 "spaghetti code"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13005840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com