我将应用程序拆分为模块时遇到问题。我发现了OSGi,但我不确定它是否能解决我的问题。
让我们说我有核心网络应用程序。此应用程序在表格中显示仪表板列表(列中包含“所有者名称”,“描述”,“创建日期”)。当我点击列表上的仪表板时,我被重定向到仪表板屏幕。
现在事情变得复杂了。这些仪表板可以是不同类型(CompanyDashboards,PersonalDashboards等)。这些类型应该是可选模块(取决于实例,实现时可能只有一种类型或两者或更多)。
现在: 我有我的应用程序的核心,我想在不知道它的类型的情况下创建仪表板列表。让我们说我有一些仪表板界面。我使用Dashboard.getName,Dashboard.getDescription,Dashboard.onClick等。我不希望核心知道连接的bundle。现在,当点击仪表板时,它应该加载并显示正确类型的仪表板(CompanyDashboard或PersonalDashboard)。
如何在没有核心知道可用类型的情况下加载正确的一个。 OSGi是否适合使用?
答案 0 :(得分:1)
您可以使用OSGi服务。您可以在自己的包中创建一个公共DashBoard接口。然后你可以有几个包,每个包提供一个DashBoard。在每个捆绑包中,您可以创建DashBoard实例并使用公共接口发布它。 然后你有一个包用DashBoard列表实现中央视图。在此捆绑包中,您将侦听DashBoard类型的所有服务并列出它们。
所以诀窍是不要实例化中心包中的各个实例。