Oop 如何解散一个大班
我有一个很大的Shape类,它的实例可以(应该)做很多事情。我有许多“域”形状类,它们继承自这个类,但除了绘图本身之外,不提供任何其他功能 我已经尝试过对Shape类进行子类化,但是所有的“域”对象仍然会继承这个子类Oop 如何解散一个大班,oop,Oop,我有一个很大的Shape类,它的实例可以(应该)做很多事情。我有许多“域”形状类,它们继承自这个类,但除了绘图本身之外,不提供任何其他功能 我已经尝试过对Shape类进行子类化,但是所有的“域”对象仍然会继承这个子类 我该如何分班?(这是300行文字,C#)300行对我来说似乎是合理的 如果您确实想要更好的帮助,请发布代码您可以通过将函数委托给其他帮助器类来分解代码 但我同意300行代码并不可怕 +1用于发布代码的几个想法(更像是启发式): 1) 检查类的字段。如果一组字段只在少数几个方法中使用
我该如何分班?(这是300行文字,C#)300行对我来说似乎是合理的
如果您确实想要更好的帮助,请发布代码您可以通过将函数委托给其他帮助器类来分解代码 但我同意300行代码并不可怕 +1用于发布代码的几个想法(更像是启发式): 1) 检查类的字段。如果一组字段只在少数几个方法中使用,那么这可能表明该组字段和使用它的方法可能属于另一个类 2) 假设一个命名良好的类,将该类的名称与该类实际执行的操作进行比较。如果您发现方法所做的事情超出了您对类名称的期望,那么这可能表明这些方法属于不同的类。例如,如果您的类代表一个客户,但也打开、关闭并写入日志文件,则将日志文件代码分解为一个Logger类。另请参见:了解一些有趣的想法 3) 如果一些方法主要调用另一个类上的方法,这可能是一个迹象,表明这些方法应该被移动到它们经常使用的类(例如,Feature Envy) 警告:就像他们说的,分手很难。如果分解类存在风险,您可能希望在适当的位置放置一些测试,以便在重构时知道您没有破坏任何东西。考虑阅读“”和“书”。 < P>谢谢代码。 以下是一些您可以尝试的事情: 1) 重构重复的代码。这种代码被复制了大约七次:
Visio.Cell pinX = GetLayoutCell(Visio.VisCellIndices.visXFormPinX);
if (pinX != null)
{
pinX.set_Result("cm", value);
}
注意:PinY也计算pinX,但不使用其值
类似的重复存在于:Pos{X,Y}{Start,End}
使这个类更具挑战性的是它是一个已经很复杂的类的包装器
由于不太了解这个领域(尽管我是形状、圆、正方形概念的专家),我很想把这个类分成几个类,每个类共享同一个核心形状对象
这是一张草图:
class EnvironShape {
private ShapeProperties _properties; // contains property management code
private ShapeCollection _children; // contains code for acting on children
private Decorators _decorators; // code for accessing decorators
private Layers _layers; // layer management code
private Position _position; // code for working with the shape's position
// Other code omitted
}
我不会立即直接暴露这些对象(例如,public ShapeCollection GetChildren()),但我会开始将Environment Shape委托给这些对象。感知可能是欺骗!也许300行中有298行是用rot13写的?@snekay我不知道你在说什么。