Chapter 01 Girlfriend总体架构

Girlfriend目前由工作流、插件、辅助工具、内置数据结构这四类组件构成。这些组件基本上都是按照协议 + 实现的方式进行开发,组件之间的交互按照协议规定的接口而不依赖于具体的实现,girlfriend自身实现了这些协议规定的接口,用户也可以自己来编写实现。

本章对这四部分组件进行大体的介绍。

工作流

工作流是girlfriend的核心,其它组件都是围绕工作流展开。

很多功能丰富的开发框架,都是围绕一个核心的模式进行扩展,比如Spring,围绕着依赖注入模式,从批处理到Web开发无所不能,因为依赖注入是一种管理组件的通用“阵法”,因此任何组件也都可以排列到这套“阵法”当中。工作流对于girlfriend的重要性就相当于依赖注入对于Spring的重要性。

工作流的协议和实现都位于 girlfriend.workflow 包下,其中protocol模块中包含了大量的抽象类,这些抽象类规定了工作流中各个组件所需要实现的接口,而gfworkflow模块是基于这些协议的内置实现。用户完全可以不使用内置实现而根据protocol中的接口自己实现一套工作流,并且自己实现的工作流仍然可以跟其它组件交互(比如,在下一章中,你可能觉着系统自带的Job组件是坨屎,那你完全可以按照Job接口的约定开发一个更好的来替代,而不影响其它组件)。

插件

在girlfriend中开发插件非常容易,插件可以是某个模块,某个类,甚至单纯一个函数。

from girlfriend.plugin import Plugin
def add_one(ctx, number):
    return number + 1
add_one_plugin = Plugin.wrap_function(
    name="add_one",
    description="add one",
    execute=add_one
)

上面的例子就是将一个接受Context对象的函数包装成插件对象,关于Context对象,我们将在后续关于工作流的章节中会详细说明,这里只需要知道它是一个用于在工作流各个组件间传递数据的对象即可。

girlfriend通过插件管理器来管理所有的插件,并利用entry_point机制将各个Package中的插件收集到统一的管理器中。

girlfriend大量使用了entry_point来扩展各个组件,因此,理解entry_point机制可以帮助你写出更好的扩展。关于entry_point

“自带电池”是Python世界的优良精神,girlfriend也不例外,内置了orm、csv、excel、json、smtp等插件供用户直接使用,这些内置插件都位于 girlfriend.plugin 包下。

辅助工具

辅助工具可以分为两类:一类是面向最终用户的Facade,比如类似gf_workflow这种执行器,可以在命令行下依据不同的模式和环境来运行某个工作流;另一类是帮助减轻工作的小工具,比如代码生成器gf_gen、配置生成器gf_config等等。

辅助工具虽然听起来很边缘,但它们却是减轻工作量的关键,后续会有发布图形编辑器的计划,直接拖动鼠标就可以创建工作流,这些都是属于辅助工具。

目前自带的辅助工具都是位于 girlfriend.tools 包中。

内置数据结构

如果要将程序组件化,那么不可避免的一个问题就是如何处理组件之间的数据共享,在操作上拥有一致抽象的数据结构有助于解决这个问题。Python自身的内置数据结构已经很强大和通用了,girlfriend目前只带了Table这一种数据结构,Table结构的优势不在于提供新的数据处理方式,而在于结果的展现,它可以方便的适配到任何需要展示有二维列表的地方,例如关系数据库、Html的Table标签、Excel等等。

内置的数据结构都位于 girlfriend.data 包中。

OK,了解girlfriend的基本构成,接下来将介绍具体的组件详情。

results matching ""

    No results matching ""