专栏名称: 逸言
文学与软件,诗意地想念。
目录
相关文章推荐
OSC开源社区  ·  低代码引擎TinyEngine 2.0新特性介绍 ·  4 天前  
程序员的那些事  ·  字节起诉前实习生,索赔 800 万 ·  6 天前  
程序猿  ·  月入5W卖肉阿姨 VS ... ·  1 周前  
OSC开源社区  ·  黄仁勋与沈向洋万字对话实录:谈Scaling ... ·  1 周前  
51好读  ›  专栏  ›  逸言

项目札记007:报表引擎模块的设计

逸言  · 公众号  · 程序员  · 2024-12-02 08:30

正文

由于EISaaS的核心功能就是生成各种数据分析报表,因此,报表引擎模块就是整个平台的核心。它一共包含三个子模块,分别是service,runtime,exporter,子模块之间的关系如下图所示:

报表引擎模块的命名空间为:xxx.eisaas.framework.engine.report,项目名称为eisaas-framework-engine-report。如前文所述,该模块依赖于eisaas.framework.engine.entity与eisaas.infrastructure.xml包。

报表引擎模块的设计并无出彩之处,遵循了与其他模块相同的设计思路,即内部由各个子模块的对象相互协作,对外提供统一的门面类封装不必暴露的细节,提升API的易用性。

看起来,这样的设计稍显平庸,但窃以为却是明智的决策,因为它遵循了架构的“一致”原则。Brooks就认为:“好的架构应该是直接的,人们掌握了部分系统后就可以推测出其他部分。「Brooks《设计原本》,转引自Blaauw《Hardware requirements for the Fourth Generation》」”这一说法也就是古人常说的“窥一斑而知全豹”,设计的雷同可以有效降低人们的学习成本,也是降低复杂度的有效原则。

说完一致性原则,再来说说隐喻(metaphor)。隐喻是文学中的修辞手法,而我最初知道在软件设计领域用到隐喻,则来自Kent Beck的XP实践,如下图所示:

有感于隐喻对软件设计乃至软件工程的重要意义,我还曾写过一篇论文《软件隐喻的本质与模式》,发表在某高校的学报上。

Kent Beck在《实现模式》一书中阐述了类库中容器融合的不同隐喻,理解这些不同隐喻,对于了解容器的本质并明确该如何正确使用容器是有裨益的。EISaaS的设计也用到了一个重要隐喻——引擎,包括数据引擎、实体引擎、报表引擎和功能引擎,它们共同构成了整个产品的核心,正如引擎构成了汽车的核心一般。