gpt4 book ai didi

c# - 带有分析小部件的分层设计——这是代码的味道吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:45:34 24 4
gpt4 key购买 nike

<分区>

我现在正在尝试的想法是拥有一个多层次的“层级”分析对象系统,该系统对一个公共(public)对象执行特定计算,然后根据其结果创建一组新的分析对象。然后,新创建的分析对象将轮到自己运行,并可选择创建更多分析对象,依此类推。关键是子分析对象将始终在创建它们的对象之后执行,这是相对重要的。整个设备将由单个线程调用,所以我现在不关心线程安全。只要满足某个基本条件,我不认为这是一个不稳定的设计,但我对此仍然有点不安。

这是一些严重的代码味道还是我应该继续以这种方式实现它?有没有更好的办法?

这是一个示例实现:

namespace WidgetTier
{
public class Widget
{
private string _name;

public string Name
{
get { return _name; }
}

private TierManager _tm;
private static readonly Random random = new Random();

static Widget()
{
}

public Widget(string name, TierManager tm)
{
_name = name;
_tm = tm;
}

public void DoMyThing()
{
if (random.Next(1000) > 1)
{
_tm.Add();
}
}
}

//NOT thread-safe!
public class TierManager
{
private Dictionary<int, List<Widget>> _tiers;
private int _tierCount = 0;
private int _currentTier = -1;
private int _childCount = 0;

public TierManager()
{
_tiers = new Dictionary<int, List<Widget>>();
}

public void Add()
{
if (_currentTier + 1 >= _tierCount)
{
_tierCount++;
_tiers.Add(_currentTier + 1, new List<Widget>());
}
_tiers[_currentTier + 1].Add(new Widget(string.Format("({0})", _childCount), this));
_childCount++;
}

//Dangerous?
public void Sweep()
{
_currentTier = 0;
while (_currentTier < _tierCount) //_tierCount will start at 1 but keep increasing because child objects will keep adding more tiers.
{
foreach (Widget w in _tiers[_currentTier])
{
w.DoMyThing();
}
_currentTier++;
}
}

public void PrintAll()
{
for (int t = 0; t < _tierCount; t++)
{
Console.Write("Tier #{0}: ", t);
foreach (Widget w in _tiers[t])
{
Console.Write(w.Name + " ");
}
Console.WriteLine();
}
}
}

class Program
{
static void Main(string[] args)
{
TierManager tm = new TierManager();

for (int c = 0; c < 10; c++)
{
tm.Add(); //create base widgets;
}

tm.Sweep();
tm.PrintAll();

Console.ReadLine();
}
}
}

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