我很难想到一个好的设计,以使用MVC来实现我的模型的绘制。我试图绘制本质上是一组形状的数组。我想使实现一种新型形状变得容易,而无需更新视图,除非我想支持这种新型形状。
公开某种类型参数,例如说一个字符串,然后视图将其用于强制转换为类并呈现它,将非常容易。但是,这确实很脆弱,并且将模型的具体类与视图紧密结合在一起。
我的另一个想法是将每个形状传递给视图提供的对象(基本上是访客模式),然后允许每个形状将其信息传递给视图而无需转换。但是,据我所知,要添加一种新形状,就需要更改所有访问者的所有视图,因为他们将实现一个需要更改以支持新形状的接口。
并不是所有视图都将使用相同的框架来实现,有些视图将基于文本,而有些视图实际上将其显示在屏幕上,因此我的渲染/样式逻辑无法模型。
这与我的模型看起来很相似:
abstract class Shape {
Color c;
Position pos;
}
class Rectangle : Shape {
int width;
int height;
}
class Circle : Shape {
int radius;
}
class View {
...
View([Shape], ...) {
...
}
func draw() {
...?
}
}
// Model is an array of shapes
[Shape] m = [Circle(...), Circle(...), Rectangle(...)]
View v = View(m)
v.draw()