【发布时间】:2009-03-10 16:01:48
【问题描述】:
我正在编写一个用于创建几何形状的 API,但在命名我的方法时遇到了一些困难。
让我们举一个简单的例子:创建一个圆圈。我们大多数人可能都熟悉graphics.drawEllipse(x, y, w, h) 之类的方法。要画一个圆,你需要知道左上角的坐标,以及圆的宽和高。
我的 API 旨在让开发人员可以轻松地使用各种信息绘制形状,而无需进行大量数学运算 - 这对于圆形来说是微不足道的,但对于其他形状来说就更复杂了。例如,您还应该能够根据圆心坐标和半径,或左上角和右下角坐标绘制一个圆。
所以我有一个带有工厂方法的Circle 类,例如:
Circle.createWithCenterAndRadius(cx, cy, r)
Circle.createWithBoundingBox(x1, y1, x2, y2)
Circle.createWithWidthAndHeight(x, y, w, h)
我觉得这里可能有“代码味道”,但我不确定。一方面,这些工厂方法必须是描述性的。另一方面,我可以预见这些方法名称会失控。例如,如何命名一个 Triangle 工厂方法,该方法在给定一个点、一侧的长度、一个角度和另一侧的长度的情况下创建一个三角形? Triangle.createWithPointSideAngleAndSide(x, y, side1, angle, side2)?那只是邪恶的吗?
如果您要使用此 API,您可以使用这样的方法名称吗?您对如何使方法名称更合理有什么建议吗?
【问题讨论】:
-
我正在将方法更改为“来自”,如 Jason 的帖子中所示。根据 Joe_M 对 kevchadder 帖子的评论,我正在删除一些不必要的“和”。我考虑过你流畅的界面想法;我使用的是 Java,所以没有命名参数。我喜欢 Slim 的想法,看看是否可行。
-
而且,我确实计划在我完成 API 草案后跟进,我应该很快就会完成。