mac*_*mac 23 python oop design-patterns modularity software-design
我正在寻找关于"如何以模块化方式设计应用程序"的指针,建议,链接,警告,想法甚至是轶事.我将在这个项目中使用python,但建议不一定要引用这种语言,尽管我只愿意实现基于OOP的设计.
这里有一些背景知道我来自哪里以及我想要实现的目标......
我的项目将是一个小型应用程序,它将使用Web服务并以各种方式显示结果,包括:
该应用程序将作为免费(语音)软件发布,因此我想让其他开发人员很容易编写插件/模块,这些插件/模块将扩展主应用程序的功能,而无需更改核心代码.
此时,插件本质上应该允许开发人员通过定义提供者,数据操作(如果有的话)以及将数据呈现给用户的方式来激活新的web服务.
我在使用drupal开发方面有丰富的经验,drupal具有强大的模块化方法,但也遵循非面向对象的设计,所以我怀疑对于python,drupal设计可能不是最佳解决方案.
如果这是至关重要的 - 核心将为GNU/Linux本地开发.
提前谢谢您的时间!
gav*_*inb 12
尝试保持松散耦合,并使用接口来提供帮助.
我将开始设计与分离关注.主要的建筑层次是:
域类可以完成工作,但不了解UI.持久层知道域类,足以根据需要保存/加载.系统界面层抽象出外部系统,这使您可以在测试时将模拟器插入后面.理想情况下,UI应使用MVC,以获得最大的灵活性.
如果没有太精细的话,人们通常不会将Drupal视为良好建筑设计的典范.它已经相当有机地发展,并且设计出现了许多动荡,正如系统升级时常规插件破损所证明的那样.
我还要回应MicSim所说的,关于仔细设计插件界面和编写多个不同的插件来练习它.这是真正充实应用程序和插件交互方式问题的唯一方法.
由于您将在应用程序中提供一些基本功能,因此请确保您自己编写应该可扩展/可替换的部件作为插件.然后,您最好了解一下您的API应该如何.
为了证明API是好的,你应该写第二个和第三个插件,因为那时你会发现你在编写第一个插件时做了很多假设.通常情况下,在完成第2步和第3步后,事情会稍微清晰一些.
现在,你应该再写一个插件,因为你写的最后一个插件类似于第一个类型,输入数据和演示(也许是另一个天气web服务).选择完全不同的东西,使用完全不同的数据,您将看到您的API仍然过于量身定制.(否则你做得很好!)