Некоторые Я рассматриваю некоторый код в кодовой базе моей команды, где мы пересекаем одну иерархическую структуру данных и строим из нее новую структуру данных. Вложенных циклов нет - каждый уровень иерархии имеет свою собственную выделенную функцию.
Итак, у нас есть такой код:
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 строк с одинаковыми именами, обычно содержит тривиальную нулевую проверку или фильтр, и краткий обзор кода показывает, что ни один метод на самом деле не вызывается больше, чем один раз. Методы общедоступны для модульного тестирования.
Лично я считаю, что в этом коде очень сложно ориентироваться, потому что десятки открытых методов == десятки потенциальных точек входа в класс.
Имеет ли этот тип шаблона кодирования имя? Это анти-паттерн? Является ли этот стиль более выгодным, чем простое вложение циклов в одну функцию?