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

mac*_*mac 23 python oop design-patterns modularity software-design

我正在寻找关于"如何以模块化方式设计应用程序"的指针,建议,链接,警告,想法甚至是轶事.我将在这个项目中使用python,但建议不一定要引用这种语言,尽管我只愿意实现基于OOP的设计.

这里有一些背景知道我来自哪里以及我想要实现的目标......


我的项目将是一个小型应用程序,它将使用Web服务并以各种方式显示结果,包括:

  • 通知弹出窗口仅包含调用的结果
  • 应用程序主窗口中的选项卡,其中包含从检索到的原始数据绘制的图形
  • 消息的缓冲区(在domand上可见),其中各种服务的结果将堆积起来

该应用程序将作为免费(语音)软件发布,因此我想让其他开发人员很容易编写插件/模块,这些插件/模块将扩展主应用程序的功能,而无需更改核心代码.

此时,插件本质上应该允许开发人员通过定义提供者,数据操作(如果有的话)以及将数据呈现给用户的方式来激活新的web服务.

我在使用drupal开发方面有丰富的经验,drupal具有强大的模块化方法,但也遵循非面向对象的设计,所以我怀疑对于python,drupal设计可能不是最佳解决方案.

如果这是至关重要的 - 核心将为GNU/Linux本地开发.

提前谢谢您的时间!

gav*_*inb 12

尝试保持松散耦合,并使用接口来提供帮助.

我将开始设计与分离关注.主要的建筑层次是:

  • 问题域(又名发动机,后端):完成所有实际工作的域类具有域知识实现域行为
  • 持久性:域类,数据库/文件系统层的存储管理
  • 用户界面:GUI,与域类进行通信
  • 系统接口:与其他系统交谈,例如.网络,网络服务

域类可以完成工作,但不了解UI.持久层知道域类,足以根据需要保存/加载.系统界面层抽象出外部系统,这使您可以在测试时将模拟器插入后面.理想情况下,UI应使用MVC,以获得最大的灵活性.

如果没有太精细的话,人们通常不会将Drupal视为良好建筑设计的典范.它已经相当有机地发展,并且设计出现了许多动荡,正如系统升级时常规插件破损所证明的那样.

我还要回应MicSim所说的,关于仔细设计插件界面和编写多个不同的插件来练习它.这是真正充实应用程序和插件交互方式问题的唯一方法.

  • 花了1年多才决定这是最好的答案.但是你走吧!今天被标记为"被接受"!;) (2认同)
  • 谢谢 - 迟到总比没有好! (2认同)

Mic*_*Sim 8

由于您将在应用程序中提供一些基本功能,因此请确保您自己编写应该可扩展/可替换的部件作为插件.然后,您最好了解一下您的API应该如何.

为了证明API是好的,你应该写第二个和第三个插件,因为那时你会发现你在编写第一个插件时做了很多假设.通常情况下,在完成第2步和第3步后,事情会稍微清晰一些.

现在,你应该再写一个插件,因为你写的最后一个插件类似于第一个类型,输入数据和演示(也许是另一个天气web服务).选择完全不同的东西,使用完全不同的数据,您将看到您的API仍然过于量身定制.(否则你做得很好!)