如何使Java项目可扩展'由开发人员?

时间:2015-03-16 21:59:01

标签: java design-patterns development-environment

我正在研究服务器引擎,我不确定以什么形式分发它。它非常模块化,它使用接口/抽象类。

应该是:

  • 一个图书馆(没有入口点,自己编写main()并致电new Server().setSomeHandler(myHandler).run()

  • 二进制文件(带有配置文件的可执行入口点,您可以使用处理程序注入JAR)

  • 别的什么?

基本上,开发人员应该能够完全扩展或改变服务器的工作方式。我不喜欢把它变成库的想法,因为它本身应该是一个平台,一个完整的服务器系统。

1 个答案:

答案 0 :(得分:1)

提供编程方式比只是可执行文件更通用。两种方式都不相互排斥。毕竟,即使开发人员提供了一个处理程序,在内部你可能仍然需要调用类似你示例中的setter来实际使用该处理程序。公开API不应该太困难。您仍然可以提供一个小型启动器应用程序,它可以加载一些配置文件并将其包装在某些API调用中(如果需要)。

更重要的问题是,是否有预定义的扩展点,开发人员可以插入自己的实现,还是完全模块化和可交换的一切?

对于提供预定义接口实现的简单方法,您可以使用ServiceLoader / SPI机制。您可以使用它构建一个基本的插件系统。

如果你想创建一个平台,像OSGi这样的东西似乎更合适。在这里,您可以为细粒度组件/服务定义API / SPI。然后,开发人员可以提供扩展服务器的自己的模块,甚至可以替换默认模块。