基本问题是我们是应该将逻辑保留在“对象”类中还是在执行计算的独立服务中?
让我们有一个场景:我们有一个可以在Canvas上显示的“Polygon”类型的对象,它也可以与其他多边形合并,创建一个两者之和的新多边形。所以我们应该有这样的方法: 1. DrawOnCanvas(..)2。Merge(..)所以问题是这些方法应该存储在Polygon类(DrawOnCanvas可以存储在Canvas类中)还是存储在某些PolygonService类中? 是否有一些形式化的方法论建议一种方式超越另一种方法?
答案 0 :(得分:0)
是否有一些正式的方法论提出了一种方法 其他
完全没有,但你会称之为a good separation of concerns。
一些观察结果:
DrawOnCanvas(...)
之类的操作不属于Polygon
类,因为您希望强制实施可重用性。也就是说,Polygon
应该可用作可绘制对象或仅用作常规域对象。我将DrawOnCanvas(...)
方法视为UIRenderer
类的一部分,它会为处理Polygon
的实例提供重载。
Merge(...)
不应该在Polygon
,因为涉及两个多边形。在PolygonService
上实施它是安全的。
如果这些方法代表一个改变Polygon
或仅涉及Polygon
的给定实例的操作,则应在Polygon
上实现方法。例如,CalculateArea(...)
,CalculatePerimeter(...)
...
答案 1 :(得分:0)
如果仅仅因为名称,PolygonService绝对是个坏主意。一旦变得有趣复杂,你可能需要一个额外的类来负责Canvas和Polygon之间的交互,这肯定需要一个不同的名称,而不是与负责合并和创建新类的类混合。