当前位置:  开发笔记 > 编程语言 > 正文

需要有关方法的冗长命名的建议

如何解决《需要有关方法的冗长命名的建议》经验,为你挑选了4个好方法。

我正在编写一个用于创建几何形状的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)
?那只是邪恶吗?

如果您要使用此API,那么这样的方法名称对您来说是否合适?您对如何使方法名称更加清晰有建议吗?



1> Jason Punyon..:

您可以将圈子方法更改为

Circle.FromCenterAndRadius(...)
Circle.FromBoundingBox(...)
Circle.FromWidthAndHeight(...)

这意味着你以一种简洁的方式从不同的表现形式创建圈子......



2> eglasius..:

任何不支持命名参数的语言都可以.如果语言支持命名参数,我更喜欢简短的Create,只有明显的参数名称.

对于具有命名参数的语言,您将:

Circle.Create(
   centerX = cx, 
   centerY = cy, 
   radius = r
);

另一个更复杂的选择,就是一个流畅的界面(但可能太多了):

circleBuilder.Center(cx,cy).Radius(r)
circleBuilder.Center(x,y).Width(w).Height(y)
circleBuilder.BoundWith().Left(x1,y1).Right(x2,y2)

Center返回仅允许Radius或Width的中间类的实例.并且BoundWith返回仅允许Left的一个.



3> Tamas Czineg..:

我认为你的描述方法没有任何问题 - 它们是紧凑的,并准确描述了正在发生的事情.图书馆的用户对您的方法的功能毫无疑问,对于维护程序员也是如此.

如果您真的担心暴露大量工厂方法(例如使用属性类的工厂方法),您也可以在此处应用一些设计模式.您可以拥有一个CircleProperties类,其属性包括CenterX,CenterY,Radius,(bool)UseCenterX,(bool)UseCenterY等,然后将其传递给公共工厂方法,该方法将确定要使用的(私有)工厂方法.

假设C#:

var circleProperties = new CircleProperties()
{
   CenterX = 10,
   CenterY = -5,
   Radius = 8,
   UseCenterX = true,
   UseCenterY = true,
   UseCenterRadius = true
};

var circle = Circle.Create(circleProperties);



4> slim..:

我的第一直觉是拥有更多类型,这将允许更直观的方法重载.

// instead of Circle.createWithCenterAndRadius(cx, cy, r)
Circle.create( new Point(cx,xy), r);

// instead of Circle.createWithBoundingBox(x1, y1, x2, y2)
Circle.create( new Point(x1,y1), new Point(x1,y1) );
// or even...
Circle.create( new Box(p1,p2));

// instead of Circle.createWithWidthAndHeight(x, y, w, h)
Circle.create( new Point(x,y), w, h);

和Point一样,你可以定义Distance(允许不同的单位)

如果这种风格适合你,请考虑为什么需要工厂方法而不是构造函数.

Circle c = new Circle(new Point(cx,xy), r);

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有