0

我正在编写图形编辑器(图论)。假设顶点需要这些属性:

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?(在我看来,是的。)有什么办法可以避免它?谢谢。

4

1 回答 1

0

我会说您最初的顶点定义违反了 SRP,但不是因为您似乎通过重构暗示的原因。另一方面,您的 VertexVM 违反了 SRP。

图论中的顶点是图中的一个点或位置。根据定义,它应该负责知道它的位置。因此它应该包含该点。颜色是否属于它是另一回事。我猜可能不是,因为这可能与显示更相关并且不属于模型类。导致视图以特定颜色显示顶点的顶点类型可能是合适的。

在 VertexVM 中,视图模型旨在向视图表示单个顶点。知道图中所有顶点的位置不是它的责任。这绝对违反了 SRP。

于 2013-06-07T19:11:06.637 回答