【发布时间】:2010-07-23 14:06:58
【问题描述】:
有些我正在审查我团队代码库中的一些代码,我们在其中遍历一个分层数据结构并从中构建一个新的数据结构。没有嵌套循环——层次结构的每一层都有自己的专用功能。
所以我们有这样的代码:
public void DoA(A a, Transform transform)
{
foreach(B b in a)
DoB(b, transform);
}
public void DoB(B b, Transform transform)
{
if (b != null && b.IsAvailable)
return;
foreach(C c in b)
DoC(c, transform)
}
public void DoC(C c, Transform transform)
{
var cAndAHalf = DoCAndAHalf(c.FindAll(x => x.Children > 0);
foreach(D d in cAndAHalf)
DoD(d, transform);
}
. . .
public void DoX(X x, Transform transform)
{
Res res = new Res();
if (x.Selected)
{
res.Selected = true;
res.ResourceCount = 1;
}
transform.Add(res);
}
这样的方法有几十种,其中每个方法的长度为 3 到 5 行,名称类似,通常包含一个琐碎的 null 检查或过滤器,粗略查看代码表明没有任何方法真正被调用超过一次。出于单元测试目的,方法是公开的。
我个人觉得代码很难浏览,因为有几十个公共方法 == 几十个进入类内脏的潜在入口点。
这种编码模式有名字吗?它是反模式吗?这种风格是否比简单地将循环嵌套在单个函数中更有利?
【问题讨论】:
-
<joking>递归下降?</joking> -
inb4:这看起来非常像(可以重构为)访问者模式。 :-D
-
哦,因为每个方法都是
public,所以很难找到启动级联函数的“根”方法。
标签: design-patterns anti-patterns