我花了一些时间来重构我的C#代码,我对我的参数列表获取局部变量的大小感到震惊,特别是当你开始深入几个级别并且必须从更高级别传递局部变量时调用堆栈。
作为一个例子,我有一些使用Linq到sql的相当复杂的代码。我在过程的早期实例化数据上下文并在整个过程中使用它。然而,在重构之后,我发现我在所有子方法中传递此DC以及其他各种状态变量。
当然,一个解决方案是将这些局部变量转换为成员变量,但这会使整个类非线程安全,并且在处理异步i / o时,这意味着使用锁和互斥锁使事情变得安全
在考虑局部变量时,您的最佳做法是什么?你放弃并让他们成员吗?或者你随身携带国家行李?或者你还做别的什么?
编辑:我不确定你需要什么细节。我不想转储一堆代码,因为它的本质是为了说明这一点,我必须展示一组非常复杂的程序。
我有许多局部变量,例如Linq到Sql DC,处理的各个阶段,处理和写入数据库的大量原始数据的更新的各个阶段。
我考虑创建一个状态上下文并传递它,但它似乎对我来说是一种hackish,虽然我认为这正是Linq to SQL dc。
答案 0 :(得分:4)
不将它们转换为成员/全局变量。即使没有多线程,他们也会使应用状态的推理变得更加困难 - 而且正如你所说的那样,它变成了一场彻头彻尾的噩梦。
如果你注意到某些参数总是在组中传递,你可以尝试将它们折叠成简单的对象并传递它们。
答案 1 :(得分:3)
潜在地,使他们成为另一种类型的成员。嵌套类型也适用于此。如果它们形成一个逻辑组,那么这很有意义,并且让你使用相同的类型编写几个方法。
除此之外,我们必须知道你正在做些什么来进一步评论,我怀疑。
答案 2 :(得分:2)
取决于该项目。我试图瞄准单一责任规则,它允许我像疯子一样重构。
碰巧我创建了虚拟持有者类来保存我需要传递的信息。我不喜欢为我的方法提供超过1或2个参数,但这取决于信息的重要程度,最重要的是项目的重要程度。