gpt4 book ai didi

design-patterns - 这个图案叫什么名字?

转载 作者:行者123 更新时间:2023-12-02 08:58:09 26 4
gpt4 key购买 nike

我正在审查团队代码库中的一些代码,其中我们遍历一个分层数据结构并从中构建一个新的数据结构。没有嵌套循环——层次结构的每个级别都有其自己的专用函数。

所以我们有这样的代码:

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 行,名称类似,通常包含一个简单的空检查或过滤器,粗略地查看代码表明没有任何方法真正被调用超过一次。出于单元测试目的,方法是公开的。

我个人发现代码很难浏览,因为数十个公共(public)方法==数十个进入类内部的潜在入口点。

这种编码模式有名字吗?这是一种反模式吗?这种风格比简单地将循环嵌套在单个函数中更有利吗?

最佳答案

对我来说看起来像是责任链。您只需处理部分传入请求,然后转移到链中的下一个项目。

Chain-of-responsibility

在您的情况下,它应该如下所示:

Action action = new Action;
action = action.SetNext(DoA);
action = action.SetNext(DoB);
action = action.SetNext(DoC);

A a = new A();
action.Process(a);

关于design-patterns - 这个图案叫什么名字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3318886/

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