我想将我正在研究的API分为两部分:'bare-bones'和'easey'。我们的想法是,“轻松”部分中的所有方法调用都可以用“裸骨”部分中的方法来表达,也就是说,它们只能作为快速和肮脏的方便方法。我想这样做的原因是,当人们第一次开始使用API时,他们对细节和性能不感兴趣:他们只是想让它工作。
之前有人试过类似的东西吗?我对命名约定和组织代码特别感兴趣。
答案 0 :(得分:3)
提供'轻松'与'裸骨'的离散分离的一种方法是使用由同一类实现的单独接口。在编写API时,我希望尽可能简单。如果您需要大量参数,请考虑使用fluent interface。
答案 1 :(得分:2)
是的,之前我做过类似的事情,而且我倾向于预先添加一个表明额外功能正在做什么的词。
例如,基本Vector
类可能只执行非常基本的向量运算(add,dot product),而Vectors
类可能有各种静态助手方法(交叉产品,投影,等等)。然后,FluentVector
包含所有这些辅助操作,同时改变底层Vector
。
然而,这不是装饰器模式 - 装饰器使用相同的界面产生不同的“装饰”结果。这是外观模式 - 具有相同基础功能的不同界面。
另外,请记住,扩展API可能有多种不同的方式来提供相同的功能。回到我的Vector
示例,可能不希望使用每个链接操作改变基础Vector
,而是引入新的Vector
- 这可能是ImmutableFluentVector
或某些这样。除了副作用的规范之外,API将是相同的。请记住一些事情。
答案 2 :(得分:1)
由于您要求使用好的名称,常用的是简单或基本API和扩展API 。正如Simon Nickerson所提到的,简单的API在技术上通过提供抽象来使用扩展API。另请参阅Facade Pattern
答案 3 :(得分:1)
假设Barebone提供基本功能,Cushy提供其他功能:
public class Skeleton
{
public virtual void Info()
{
}
}
public class Adorner:Skeleton
{
private Skeleton _skeleton;
public Adorner(Skeleton skeleton)
{
_skeleton = skeleton;
}
public override void Info()
{
//apply adorning work
}
}
Skeleton bareBones = new Skeleton(); Adorner cushy = new Adorner(bareBones);
答案 4 :(得分:0)
有人在工作时建议Foo
和FooHelper
。我喜欢它。