重构本地变量的最佳实践

3
我一直在重新组织我的C#代码,发现在处理本地变量时,参数列表变得越来越长尤其是当你需要从调用栈中的上层传递本地变量时。例如,我有一些使用Linq to sql的复杂代码。我在过程的早期实例化了数据上下文,并在整个过程中使用它。然而,在重构之后,我发现我需要将这个DC和其他各种状态变量传递到所有的子方法中。
当然,其中一个解决方案是将这些本地变量转换为成员变量,但这会使整个类非线程安全,并且在处理异步I/O时,这意味着必须通过锁定和互斥来保证安全性。在处理本地变量方面,您的最佳做法是什么?是让他们成为成员?还是携带状态负担?或者您会采取其他措施?
编辑:我不确定您需要哪些更多细节。我不想倾倒一堆代码,因为出于说明的目的,我不得不展示一组非常复杂的过程。我有许多本地变量,例如Linq to Sql DC、各种处理阶段、大量原始数据的更新和处理写入数据库的各种阶段。我考虑创建一个状态上下文并传递它,但我觉得这有点hackish,尽管这恰恰是Linq to SQL DC的作用。
3个回答

4

不要将它们转化为成员变量或全局变量。即使没有多线程,它们也会让应用程序状态的推理难度增加一个数量级 - 而有了多线程,正如你所说,这将成为一场彻底的噩梦。

如果你发现某些参数总是成组传递,请尝试将它们折叠成简单的对象,并传递这些对象。


3

潜在地,将它们作为另一种类型的成员。嵌套类型在这里也很有效。如果它们形成一个逻辑组,并且让您使用相同类型编写多个方法,则这非常有意义。

除此之外,我们需要了解您正在做什么的详细信息,才能进一步评论。


2

根据项目需要,我尽量遵循单一职责原则,这样可以让我像疯子一样重构代码。

有时我会创建虚拟占位类来保存需要传递的信息。我也不喜欢我的方法有超过1或2个参数,但这取决于信息的重要性和项目的重要性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接