- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我如何确定或判断一组类是否是“意大利面条代码”?
当我在 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/
我经常看到“意大利面条”,我只想清楚地解释什么是 意大利面条代码,什么不是。只是因为我不想这样做。 PHP 引用资料会有所帮助,因为这是我选择的语言。 最佳答案 区别在于意大利面条代码是由其他开发人员
我如何确定或判断一组类是否是“意大利面条代码”? 当我在 Visual Studio 中的“体系结构”菜单下生成依赖关系图时,我是否应该将我的代码视为意大利面条,并看到有很多弯曲的箭头指向各处? 我总
任何清理“header spaghetti”的推荐做法编译时间慢 (Linux/Unix)? 在 GCC 中是否有任何等同于“#pragma once”的东西? (发现关于此的相互矛盾的消息) 谢谢。
我正在尝试根据随时间推移由数值组成的数据创建意大利面条图。这是一个大数据,所以不能在这里粘贴,但是在尝试时 matplot(x,y,type="l",lty=1,col="#00000020") 这是
我有一个 Spaghetti Stack(一种 N 叉树数据结构,其中子节点具有指向父节点的指针)- 从数据库接收。 从数据库接收到的“堆栈”只是一个包含所有节点的列表,因此可以里面有多个堆栈。 节点
我有一张图像,人眼清楚地包含几个(此处为 2 个)重叠的“花边”。 这源于一项相当冗长的实验图像分析。 红点是两个向量 px 和 py 中包含的所有点,一个是红色像素的 x_position,另一个是
一般性问题 假设您正在编写一个系统,该系统由一个图以及可以根据相邻节点的配置激活的图重写规则组成。也就是说,您有一个在运行时不可预测地增长/收缩的动态图。如果您天真地使用 malloc,新节点将被分配
感谢您的阅读。 我有一个情节,希望使我的数据集中最新的一年脱颖而出。我的数据只是一个长期的时间序列,所以我想绘制同比比较,所以我对其进行旋转,然后绘制它。 第一段代码运行并大致给出了我所追求的内容(没
我得到的数据类似于以下数据:pandas.DataFrame: diff_1 diff_2 1949-01-01 06:
我刚在美国公司找到一份工作,我继承了一堆讨厌的 php 4 平面文件。我想迁移到 Symfony 2,但我无法获得重构整个东西的许可。 有没有人对将项目的小部分或部分迁移到 Symfony 2 有任何
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 3 年前。 Improv
这个问题的灵感来自 How to transform a flow chart into an implementation?它询问从代码中通过算法消除 goto 语句的方法。 answer this
我刚刚在读 top 100 signs of spaghetti code我遇到了数字 4,它简单地说明: if ($status == "awake"){ $actitivity = "Wr
我有一个包含大约 50-55 个代码文件的 php 应用程序。代码量最大的文件大约有 1200 行代码(包括空格、制表符和多个换行符...),其余代码文件相对较小。 几乎每个文件中的应用程序代码都是
我的应用程序是关于意大利面条的,它应该允许您共享任何 text/plain 内容,前提是它是关于意大利面条的。所以我需要一个只接受此类内容的 Intent 过滤器。 如果有帮助,这些是意大利面条示例:
我是一名优秀的程序员,十分优秀!