【问题标题】:Passing a Class vs passing an instance; Simple API design传递一个类与传递一个实例;简单的 API 设计
【发布时间】:2011-12-07 08:17:31
【问题描述】:

简介

我知道我将要描述的 API/库非常简单,我做什么来让它工作并不重要,但我希望最终设计出更复杂的系统,并希望得到一些关于如何设计简单有效的 API 的良好实践。

信息

我正在重做一个我不久前在 Android 中做的项目,以使一些代码更可重用(不断试验新的“API”设计以供实践)。

这个相当简单的应用程序的一部分会围绕屏幕上的文本进行随机播放,并且由于基于这个“库”的三个不同的程序具有自己的随机播放效果,因此我选择将通用代码提取到一个实际的库中并解耦从系统的其余部分实施洗牌。我改变了一些事情来完成这项工作:处理洗牌的代码放在一个类中,每个应用程序都提供一个配置对象,其中填充了运行特定应用程序所需的值。在当前设计下,配置对象提供了所需的 shuffle 实现的 Class。然后,该库会在以后需要时创建该类的实例。

我喜欢这个,因为它可以让我的库控制对象的所有内容并消除实例对外部代码的暴露,但它也阻止我使用构造函数参数(随机播放速度、方向等)自定义实现。 (对此的一个解决方案是传入某种数组,实现可以从库创建时提取它的数据,但我讨厌需要您以某种多云且难以传递的参数的库 -编译时检查配置废话,例如“speed:90;herp:derp”。)

我的问题

最好通过配置传递类,以便库可以控制它的整个生命周期,或者这是不切实际的,我应该只做一个该死的实例并将其传递。另外,如果传递一个类是不切实际,什么时候传入一个类是个好主意? (除了在某种映射中在其 Class 下注册类实例以便稍后在某种插件系统中查找)

【问题讨论】:

    标签: java generics class-design


    【解决方案1】:

    如果您使用 DI(依赖注入),则对象的生命周期在库外部处理。我更喜欢这种方法,除非生命周期非常简单,并且不需要组件可配置。

    【讨论】:

    • 我开始觉得 Android 中事物的生命周期严重限制了我实现“正常”设计的能力。而且我认为提供一个配置对象,最终使用值/类型进入库(配置基于接口)是手动注入的依赖项(en.wikipedia.org/wiki/…)。这也让我可以动态更改配置以获得有趣的用户端配置选项。
    猜你喜欢
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 2018-10-10
    • 2016-08-27
    • 1970-01-01
    • 2021-01-13
    相关资源
    最近更新 更多