我正在编写一个图形编辑器(图形理论)。让我们想象顶点需要这些特性:
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? (在我看来,它是。)有什么方法可以避免它吗?感谢。
答案 0 :(得分:0)
我会说你的初始顶点定义违反了SRP,但并不是因为你似乎暗示你的重新分解。另一方面,您的VertexVM违反了SRP。
图论中的顶点是图中的一个点或位置。根据定义,它应该负责知道它的位置。因此它应该包含这一点。 Color是否属于它是一个不同的情况。我猜也许不是因为这可能更多与显示相关并且不属于模型类。导致视图以特定颜色显示顶点的顶点类型可能是合适的。
在VertexVM中,视图模型旨在向视图表示单个顶点。知道图中所有顶点的位置不是它的责任。这绝对违反了SRP。