我正在使用矢量绘图应用程序(在java中),我正在努力解决我的模型类和视图/控制器类之间的分离.
一些背景:
您可以绘制不同的形状:
矩形,线条和饼图段
有4种工具可以在画布上操纵形状:
缩放工具,移动工具,旋转工具和变形工具
对于这个问题,变形工具是最有趣的一个:它允许您通过拖动其中一个点并调整其他属性来更改形状,如下图所示:

这些转换规则对于每个形状都是不同的,我认为它们是模型业务逻辑的一部分,但在某种程度上它们需要暴露给视图/控制器(工具类),以便它们可以应用正确的形状.
此外,形状通过不同的值在内部表示: - 矩形存储为中心,宽度,高度,旋转 - 该行存储为起点和终点 - 饼图段存储为中心,半径,角度1,角度2
我计划在未来添加更多形状,如星星,气泡或箭头,每个都有自己的控制点.
我还计划在未来添加更多工具,例如旋转或缩放形状组.
每个工具的控制点都不同.例如,使用缩放工具时,您无法抓取中心点,但每个缩放控制点需要与一个轴点(或多个让用户选择)相关联.
对于像矩形,直线和饼图这样的简单形状,控制点对于类的每个实例都是相同的,但是期货形状如贝塞尔曲线路径或星形(具有可配置的尖峰数)将为每个实例提供不同数量的控制点.
那么问题是什么是建模和实施这些控制点的好方法?
由于它们对于每个工具略有不同并且携带一些工具/控制器特定数据,因此它们以某种方式属于工具/控制器.但由于它们也特定于每种类型的形状并且具有非常重要的域逻辑,因此它们也属于该模型.
我想避免在添加一个工具或形状时为每个工具/形状组合添加特殊类型的控制点的组合爆炸.
更新:再举一个例子:将来我可能会想到一个我想要支持的新形状:弧形.它类似于饼段,但看起来有点不同,拖动控制点时表现完全不同.
为了实现这一点,我希望能够创建一个实现我的Shape接口的ArcShape类并完成.

java oop model-view-controller user-interface vector-graphics