ViewModel中的单一责任原则

时间:2013-03-26 15:59:38

标签: mvvm viewmodel single-responsibility-principle

我正在编写一个图形编辑器(图形理论)。让我们想象顶点需要这些特性:

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

1 个答案:

答案 0 :(得分:0)

我会说你的初始顶点定义违反了SRP,但并不是因为你似乎暗示你的重新分解。另一方面,您的VertexVM违反了SRP。

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

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