2009-02-10 74 views
3

我一直在花费一些时间来重构我的C#代码,我对我的参数列表获得多大的本地变量感到震惊,特别是当您开始深入几个级别并且必须传递来自调用栈上方的局部变量。使用局部变量重构的最佳实践

作为一个例子,我有一些使用Linq到sql的相当复杂的代码。我在过程的早期实例化数据上下文,并在整个过程中使用它。但是,在重构之后,我发现我在所有子方法中都传递了这个DC,以及其他各种状态变量。

当然,一种解决方案是将这些局部变量变为成员变量,但这会使整个类非线程安全,并且在处理异步I/O时,意味着使用锁和互斥锁来削弱事物以使它们安全。

当考虑局部变量时,最佳实践是什么?你是否放弃并让他们成为会员?或者你带着州行李?或者你做别的事情?

编辑:我不知道你需要什么更多的细节。我不想转储一堆代码,因为通过它的本质来说明这一点,我必须展示一组非常复杂的过程。

我有很多局部变量,比如Linq到Sql DC,处理的各个阶段,处理和写入数据库的很多原始数据更新的各个阶段。

我想过创建一个状态上下文并传递它,但对我来说似乎有些骇人听闻,尽管我想这正是Linq to SQL dc的意思。

回答

3

可能使其成为另一种类型的成员。嵌套类型也适用于此。如果它们形成一个逻辑组,那么这会很有意义,并且可以使用相同的类型编写多个方法。

除此之外,我们必须知道您正在做什么以进一步评论我怀疑的细节。

4

不是把它们变成成员/全局变量。即使没有多线程,他们也会使应用程序状态的推理变得更加困难 - 就像你说的那样,它会变成一场完全的噩梦。

如果您发现某些参数总是以组的形式传递,那么您可以尝试将它们折叠为简单对象并将它们传递给它们。

2

取决于该项目。我尝试着眼于单一责任规则,它允许我像疯子一样重构。

它发生时,我创建虚拟持有人类来保存我需要传递的信息。我不喜欢为我的方法提供超过1或2个参数,但这取决于信息的重要性,最重要的是项目的重要性。