知识卡片

Main组件是系统最细节化的部分,也可被视为一种插件

普通读书笔记卡

内容

每个系统都至少要有一个组件负责创建、协调、监督其他组件的运转,这就是Main组件。它是系统里最细节化的部分——除了操作系统,没有其他组件会依赖它——处于[[整洁架构综合多种架构思想的五个共同特征与依赖关系规则]]所属同心圆结构的最外圈,是整个系统的初始点:任务是创建所有工厂类、策略类和其他全局设施,最后把控制权转交给最高抽象层的代码去处理。Main组件里的依赖关系通常该由依赖注入框架来注入,一旦框架完成注入,Main组件此后就该能不依赖该框架自行分配这些依赖了。以Hunt the Wumpus游戏的Main组件为例:它负责加载游戏文本字符串(这些细节游戏主体代码完全不该了解)、用HtwFactory构建游戏(把HuntTheWumpusFacade这类细节更多、变更更频繁的类传进去,避免这类类的变更牵连Main组件重新编译部署)、创建输入数据流并启动主循环(主循环只处理简单输入指令,具体处理逻辑交给更高层组件)、生成游戏地图。可以把Main组件本身也理解成应用程序的一个插件——负责设置起始状态、配置信息、加载外部资源,最后把控制权转交给其他高层组件。这个理解带来一个实用价值:既然Main组件能以插件形式存在,一个系统完全可以有多个Main组件、各自对应不同配置——针对开发环境、测试环境、生产环境分别设计Main组件,甚至可以按部署的国家、地区、客户来定制不同的Main组件;把Main组件当成插件来对待,用架构边界把它和系统其余部分隔开,会让这类差异化配置变得容易得多。

参考来源

- 位置:《架构整洁之道》第26章《Main组件》全文(源文件:_epub-src/text/part0014_split_011.html) - 结论依据:原文定义Main组件为系统最细节化的部分、处于整洁架构最外圈,用Hunt the Wumpus的Main组件示例说明其具体职责,并提出Main组件可被视为一种插件、可为不同环境设计多个Main组件的观点,直接支撑本卡片结论。 - 原始内容:Main组件是系统中最细节化的部分——也就是底层的策略,它是整个系统的初始点……Main组件也可以被视为应用程序的一个插件……因此我们可以为一个系统设计多个Main组件,让它们各自对应于不同的配置。