【发布时间】:2013-03-16 12:29:21
【问题描述】:
我正在编写图形编辑器(图论)。假设顶点需要这些属性:
class Vertex{
int ID {get;}
Color color {get; set;}
Point point{get; set;}
}
但这违反了 SRP(单一责任原则)。所以我创造了一些想法:
class Vertex{
int ID {get;}
}
class Positions{
private Dict<Vertex,Point> _pos;
setPosition(Vertex v, Point pos);
Point getPosition(Vertex v);
}
//etc.
对吗?
但是对于顶点的ViewModel需要,所有这些属性都要显示出来。
class VertexVM
{
Vertex _v;
Positions _positions;
//...
Point position
{
get {return _positions.getPosition(_v); }
}
// same for color etc
}
是否违反 SRP? (在我看来,是的。)有什么办法可以避免它?谢谢。
【问题讨论】:
-
我一直在为此苦苦挣扎。我个人首选的方法(也不是唯一的方法)是为我的复杂视图模型使用部分类。
-
SRP 并不意味着您应该拥有只包含单个属性的类...
-
@walther 是的,我知道......它是由改变的原因定义的。但我绝对可以说出改变这个类的两个原因(例如,Position 2D -> 3D,Color RGB -> HSL)
-
也许试着找出“改变的理由”实际上是什么意思:) 你仍然在修改一个类的属性,这是一个单一的原因。如果 SRP 的意思与您认为的一样,那么您将只有一个属性类。在设计课程时使用常识,否则您以后将面临许多问题。原则不是法律,它们是指导方针,应该这样对待。
-
@walther :我仍然认为管理颜色(可能至少有五个转换方法)和位置(我也可以想象至少对于方法)的类违反了 SRP。我知道这没什么大不了的,如果我这样写,也不会是世界末日。我实际上需要我论文的一个理论部分的答案。
标签: mvvm viewmodel single-responsibility-principle