当我创建一个应用程序时,我通常会创建一个静态类,其中包含静态方法和属性,我无法确定将其他位置放在哪里。
这不是一个特别好的设计,但这就是一个重点:它给了我一个地方化一整套设计决策的地方,我还没有想到。一般而言,随着应用程序的增长并通过重构进行改进,这些方法和属性实际应该存在的地方就会变得更加清晰。毫不夸张地说,重构工具的状态是这样的,以至于这些改变通常不会特别痛苦。
我试过用另一种方式做,但另一种方式基本上是在我足够了解我的应用程序以正确设计对象模型之前实现对象模型。如果我做那,我花了相当多的时间和精力提出了一个平庸的解决方案,我必须在未来某个时候从头开始重新审视和重建。好吧,如果我知道我将重构此代码,那么我怎么样跳过设计和构建不必要的复杂类的步骤,这些类并不真正起作用?
例如,我构建了一个正被多个客户使用的应用程序。我很早就想到,我需要有一种方法来分离需要针对不同客户以不同方式工作的方法。我构建了一个静态实用程序方法,我可以在程序中的任何位置调用一个自定义方法,并将其粘贴到静态类中。
这工作好几个月。但是有一点刚开始看起来很丑陋。所以我决定将它重构成它自己的类。在我查看所有调用此方法的地方的代码时,非常清楚,所有自定义方法确实需要成为抽象类的成员,客户的程序集需要包含单个派生类它实现了所有的抽象方法,然后程序只需要从配置中获取程序集名称和命名空间,并在启动时创建自定义要素类的实例。对于我来说,找到所有必须定制的方法非常简单,因为我需要做的就是找到每个地方,我的负载自定义功能方法被调用。我花了整整一个下午的时间来完成整个代码库并使这个设计合理化,最终的结果是非常灵活和强大,并且解决了正确的问题。
事情是,当我第一次实现该方法(实际上是三个或四个相关的方法)时,我意识到这不是正确的答案。但我不知道足够的答案是什么。所以我用最简单的错误答案去解决问题,直到正确的答案变得清晰。
问题是关于C#,而不是Java。无论如何,在.NET和Java中,String类是封闭的(最终使用Java) – 2009-10-31 03:19:42