我正在寻找有关“如何以模块化方式设计应用程序”的指针、建议、链接、警告、想法甚至轶事。我打算在这个项目中使用python,但建议不一定要引用这种语言,虽然我只愿意实现基于OOP的设计。
这里有一些上下文来了解我来自哪里以及我想要实现的目标......
我的项目将是一个小型应用程序,它将使用 Web 服务并以多种方式显示结果,包括:
- 仅包含调用结果的通知弹出窗口
- 应用程序主窗口中的选项卡,其中包含从检索到的原始数据绘制的图形
- 各种服务的结果将堆积起来的消息缓冲区(在域上可见)
该应用程序将作为免费(如语音)软件发布,因此我想让其他开发人员非常容易编写插件/模块,这将扩展主应用程序的功能,无需更改核心代码。
此时,插件本质上应该使开发人员能够通过定义提供者、数据操作(如果有)以及向用户呈现数据的方式来激活新的网络服务.
我在使用 drupal 进行开发方面拥有丰富的经验它具有强大的模块化方法,但也遵循非面向对象的设计,因此我怀疑对于 python,drupal 设计可能不是最佳解决方案。
如果这很重要 - 核心将为 GNU/Linux 本地开发。
提前感谢您的宝贵时间!
最佳答案
尽量保持松散耦合,并自由地使用接口(interface)来提供帮助。
我会从关注点分离开始设计。主要的架构层是:
- 问题域(又名。引擎,后端):执行所有实际工作的域类,通过域知识实现域行为
- 持久性:域类、数据库/文件系统层的存储管理
- 用户界面:与域类对话的 GUI
- 系统接口(interface):与其他系统通信,例如。网络、网络服务
领域类完成工作,但不了解 UI。持久层知道域类,足以根据需要保存/加载。系统接口(interface)层抽象出外部系统,让您在测试时插入模拟器。 UI 应理想地使用 MVC,以获得最大的灵 active 。
如果不强调它,人们通常不会将 Drupal 视为良好架构设计的典范。它已经相当有机地发展,并且设计发生了许多剧变,系统升级时经常出现插件损坏就是证明。
我也会回应 MicSim 所说的,关于仔细设计插件界面并编写多个不同的插件来使用它。这是真正充实应用程序和插件如何交互问题的唯一方法。
关于python - 如何以模块化的方式设计应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1865727/