API设计 - 使用对象或集合作为参数?

时间:2017-09-04 14:46:09

标签: java oop api-design

以下哪种设计被认为更适合API?为什么?

apiMethod(Map<A, B> aToB)

apiMethod(MapWrapper<A, B> mapWrapper) 其中MapWrapper只是一个包含对Map的引用的类。

这两种方法的优点和缺点是什么?

2 个答案:

答案 0 :(得分:3)

你总是努力做到&#34;简约&#34;蜜蜂。

在这种情况下:当您的API在传递地图时有效 - 当然您选择该路径。为什么要将客户的负担首先换行该地图?!

选项1的专业是 - 这是直接的路径。

而选项2只有使用更难以使用API​​的缺点。

换句话说:如果中心&#34;属性&#34;该参数是&#34;是一个地图&#34; - 那么它应该作为地图传递。但当'&#34;中心主题&#34;是不同的东西 - 然后你传递与其他主题相关的东西。

答案 1 :(得分:0)

我认为使用doSomeStuff(Session session){ String aa = session.get("aa"); String bb = session.get("bb"); return aa + bb; } 作为API的参数是不好的做法,因为很难理解您的API真正需要什么。在一些古老的代码中,我找到了类似的方法:

doSomeStuff(String aa, String bb){
  return aa + bb;
}

此代码的重构将是:

aa

您知道需要bbcore.es5.js:1169 Uncaught Error: No provider for PlatformRef! at injectionError (core.es5.js:1169) at noProviderError (core.es5.js:1207) at ReflectiveInjector_.webpackJsonp.../../../core/@angular/core.es5.js.ReflectiveInjector_._throwOrNull (core.es5.js:2649) at ReflectiveInjector_.webpackJsonp.../../../core/@angular/core.es5.js.ReflectiveInjector_._getByKeyDefault (core.es5.js:2688) at ReflectiveInjector_.webpackJsonp.../../../core/@angular/core.es5.js.ReflectiveInjector_._getByKey (core.es5.js:2620) at ReflectiveInjector_.webpackJsonp.../../../core/@angular/core.es5.js.ReflectiveInjector_.get (core.es5.js:2489) at createPlatform (core.es5.js:4239) at core.es5.js:4265 at core.es5.js:4262 at core.es5.js:4262 来调用您的API。