我正在编写一个将在多个站点安装的Python应用程序。在这些站点中的每个站点上,都需要使用每个站点上不同的api与其他软件进行接口,但所有逻辑上都在做同一件事。
我的解决方案是创建一个基类,该基类封装通用逻辑并提供返回主应用程序的单个接口,然后为每个不同的站点特定api分离子类。基类和子类都将在与主应用程序一起部署到每个站点的“接口”包中定义。为了确保通用的代码库(为了易于部署和维护),所有站点(主应用程序包和接口包)都将具有相同的代码。
我的问题是,如何最好地确保主应用使用interfaces包中的正确子类?
我当前的想法是让主应用程序在interfaces包中调用“ get_interface”函数,该函数读取ini文件以标识该站点上正在使用的接口子类,并将该子类返回给主应用程序。显然,这需要ini文件是特定于站点的,但这是唯一的事情。
那是最好的方法吗?
要根据要求添加一些更具体的信息:
该应用程序与天文学有关。它的目的是使从目标识别到望远镜成像会话调度到处理最终图像的管道自动化。它广泛使用了Astropy及其附属程序包。
在某些方面需要与其他软件接口。例如:
目标标识,它通过Web服务从各种天文数据库中获取目标信息。
拼版解决方案,它将图像数据上传到本地(基于Windows或Linux的)应用程序或远程网络服务(例如astrometry.net)。
成像,它需要连接到商业望远镜/天文台控制程序包(例如ACP或ASA序列)以实际执行成像会话。
在每个区域中,逻辑接口几乎都是相同的,因此,在上述情况下,我设想了3个类来提供抽象,这些抽象将通过与我所连接的目标系统特定的子类来实现。
我实际上只是在探索最佳的设计模式,以确保应用程序的核心与其他系统的接口实现完全隔离的方式来实现(因为这些更改经常发生)。
在某种程度上类似于使用设备驱动程序。核心应用程序需要调用一项服务(而不在乎如何实现),并将该调用路由到“驱动程序”(我适当的接口子类),这对于每个站点实现可能是不同的。