0

我应该设计一个可重用的组件。它将是一个带有 API 接口的 Java 库,隐藏所有实现细节,包括内部数据依赖。它需要客户端应用程序在调用任何方法之前需要在库中配置的一组静态数据

经过大量的辩论和讨论,我们提出了两种设计方法

  1. 第一种设计方法:静态数据在库内部,因此,采石和数据查找表的实现应该在内部实现,对库的客户端应用程序透明

    在这种方法中,我们将执行以下操作:

    a1。库内部依赖于一个抽象的静态数据接口,并且有各种数据源实现:例如:数据库查询实现,文件查询实现,配置查询实现
    a2。客户端应用程序使用静态数据源配置实现

    反对这种方法的争论:

    d1。图书馆不应建立数据库连接
    d3。客户端绑定到数据模式,因为它不能更改查询。只有它可以将库指向数据源

  2. 在第二种设计方法中:静态数据被视为依赖项(即使它在库内部)。所以应该注入,即库的客户端应用程序需要实现所有静态数据查找

    我们会做以下事情

    :库实现了服务提供者接口 (SPI)
    b. 客户端应用程序需要实现接口
    c. 查找表与客户端应用程序一起使用

    反对这种方法的辩论

    d1。静态数据在库内部,库的用户不必担心实现
    d2。由于不同客户端的数据基本相同,因此会有冗余代码
    d3。更多冗余代码 = 更多错误

我不确定要遵循哪种方法。如果你能从你的经验中回忆起一种优雅的方法,那对我来说真的很有帮助。

提前谢谢了!

4

1 回答 1

0

我建议使用选项 2 来保持您的库模块化,甚至用于您自己的维护目的。要解决让客户端自己实现数据连接逻辑的问题,请将您的库与配置文件(例如用于使用 MyBatis 进行 DB 连接的 Mapper XML)一起提供,如果用户选择更新它,则可以对其进行编辑。

您可以提供其他配置选项来使用其他数据连接,但它们不必像编辑 XML 文件那样简单。

您可以将默认设置设为最简单的选项,并要求用户在远离默认设置的情况下投入更多工作,同时避免将自己编码到角落。

于 2013-05-21T15:13:31.167 回答