我正试图在工作中的一个应用程序中重写非常难看的类。在我们的一个类中,有数百行代码确保某些类的初始化和重新初始化。目前,这是通过可怕的强力-y方式完成的,在这种方式中,您编写init代码并手动将其复制到re-init部分(因为它们非常相似)。延迟或可重复初始化的最优雅方式
因此,我开始将它重写为代表列表的形式,然后在两个地方都使用参数调用它们(bool isReinit)。然后我注意到大多数代表也是相同的,因为90%的类的初始化过程是相同的。这意味着我应该能够创建一些默认的初始化函数来大幅简化代码。目前,我创造了这样的事情:
https://dotnetfiddle.net/RVS5UT
我还创建类CustomInitializer它实现IInitializer,只需要一个Func键作为参数,并运行它的初始化,对于初始化是很多不同的情况。
现在,这个简化和匿名的工作代码块,但它的工作原理。问题是整个方法非常尴尬,构造函数签名很糟糕。有什么方法可以简化吗?我找不到可以帮助我的任何模式或方法?任何迈向更好代码的步骤都是值得欢迎的,也许我只是错过了一些东西。
还有一个问题。我想出的一个解决方案是将属性对(var1a + var1b,var2a + var2b,..)存储在一个对象中,并将其直接传递给Initialize方法。但是这意味着移动这些属性,目前遗憾的是这些属性是不可能的,因为这个文件有超过18K行,并且由于重构了一个方法(即使它很长),代码审查人员会因为更改第三个而杀了我。我需要将目标属性(var1a,var1b,var2a,..)留在现在的位置。这也可能意味着没有优雅的方式来解决这个问题。
我使用.NET 4.0,C#5.0
编辑:我要初始化的类型没有接入(另一种愚蠢的捕捞)
感谢您的帮助。
为什么不简单地用新的实例替换旧实例?重新初始化可以通过简单地引用新实例来完成。无论如何,一个如此之大的班级没有任何意义。所有这些属性之间的凝聚力是什么?这个班级的单一指数是多少?它有什么行为?重新初始化这个类是什么意思?有时最好解释最初的问题,并将所有当前的解决方案部分从图片中删除。 – plalx