python - 如何以模块化的方式设计应用程序?

标签 python design-patterns oop modularity software-design

我正在寻找有关“如何以模块化方式设计应用程序”的指针、建议、链接、警告、想法甚至轶事。我打算在这个项目中使用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/

相关文章:

python - 如何处理 python 中的 boto 异常?

python __init__ 参数变成一个元组

language-agnostic - 新的设计模式/设计策略

python - Python 中有函数吗,还是一切都是方法?

测试属性的 Pythonic 方法?

python - PIL.Image.save() 到 FTP 服务器

python - pyODBC 插入静默失败

model-view-controller - Controller 方法应该带参数吗?

java - App Engine 服务的适当范围

php - 在 PHP 中为我的类方法提供默认对象