在C#中,应该考虑在类之前多少行重构?

Dav*_*rab 17 c# refactoring class

一个好的经验法则是我智能地重构超过50行的任何方法.

计数不包括注释和空格,而是实际代码.我之所以聪明地说,有很多时候,超过50行的课程是可以接受的,不能或不应该改变.

我对课程没有经验法则.一般来说,我不检查类是否应该重构.

在我目前的项目中,我刚刚完成了一个近4000行的课程.然而,没有超过50的方法,并且大多数行和方法是私有的,并且不对类外的任何数据起作用.

重构类的经验法则是什么?

Mar*_*tta 43

当班级违反SRP时,是时候重构了.

单一责任原则是一种计算机编程原则,规定每个模块或类应对软件提供的功能的单个部分负责,并且该责任应完全由类封装.其所有服务应与该责任严格一致

  • SRP的问题在于,它取决于抽象级别 - 有人可能会说Windows的责任是提供服务以简化与机器的交互,因此应该是单个类...... (7认同)
  • 我认为,仅仅看一下SRP,就不够了.很难找到一个好的例子,但有些情况下,一个类只有一个责任,但仍然显示可以提取的内部结构.所以我想说,如果可以增加代码的熵,你应该重构. (3认同)
  • @Daniel - 你的意思肯定是“减少”熵(即将其置于更有序的状态)? (2认同)

rus*_*der 18

如果您的课程违反了以下"规则"之一,您应该考虑重构.

您正在寻找SOLID,可在此处找到更详细的截屏视频.

  • S RP:单一责任原则,一个班级改变应该不止一个理由.

  • O CP:开放封闭原则,软件实体(类,模块,功能等)应该是可以扩展的,但是关闭以进行修改.

  • L SP:liskov替换原则,使用对基类的引用的函数必须能够在不知道它的情况下使用派生类的对象.

  • I SP:接口隔离原则,客户端不应该被迫依赖于他们不使用的接口.

  • D IP:依赖倒置原则:

    • 高级模块不应该依赖于低级模块.两者都应该取决于抽象.

    • 抽象不应该依赖于细节.细节应取决于抽象.


Ste*_*eve 8

不要让LOC成为您的主要指标.对我来说50条线看起来真的很小.使用50行文件,您最终会在解决方案中拥有不合适数量的类文件.您在文件之间进行的所有导航都会降低您的工作效率,您的IDE将始终充斥着太多标签.我个人尝试先按名称空间将类组织成逻辑组.在逐个类的基础上,我尝试使代码更小,更容易阅读.有时,类文件会变大.当类文件是2000多行时,我开始感到恶心.除此之外,我会根据具体情况处理.


Ed *_*fer 6

我不会说重构大型课程有任何"经验法则".有时一个类真的封装了很多业务逻辑,应该尽可能大.但是,您可以考虑问自己一些问题:

  1. (假设你正在编写面向对象的代码)我的代码是否真的面向对象?也就是说,它是否遵循单一责任原则(谢谢,Nebakanezer)?这个班是帮助班吗?如果是这样,我怎么能将其方法重构为更合适的对象类?

  2. 我有一个坚实的架构吗?也就是说,我是在利用抽象和继承而不是在每个班级重新发明轮子吗?重载方法是否适当调用基本方法?

  3. 我真的需要所有这些代码吗?是否可以使用xpath,lambda表达式或某种形式的数据库驱动表达式来外化某些逻辑?

  4. 代码是否可扩展?容易维护吗?它是从一开始就设计得很好,还是我们总是制作小补丁来试图解决问题?

我希望这有点帮助; 重构大型课程可能很困难,但我想如果你开始查看我的问题,你可能会很快发现你的代码还有改进空间......我知道我通常会这样做.

特别是看#1 - 人们在整个地方创建大量的帮助类是非常普遍的,这是非常反面向对象的(在我看来).这是一个不同的主题,但你可能想要看到你所做的课程中真正的所谓 - 以及在其他地方可能/应该是什么.

根据经验,如果课程可维护且灵活,则可能不需要更改.:)