最后,再给一个思考题吧。
前面提到的数据扩展,还都是领域内的有限扩展。如果我连业务领域是什么还不知道,能不能做数据扩展呢?可以的,Salesforce 的 force.com 就是这么做的,其底层数据存储完全是元数据驱动的(metadata-driven [2]),他用一张有 500 个匿名字段的表,去支撑所有的 SaaS 业务,每个字段的实际表意是通过元数据去描述的。如下图所示,value0 到 value500 都是预留的业务字段,具体代表什么意思,由 metadata 去定义。
说实话,这种实现方式的确是一个很有想法,很大胆的设计,也的确支撑了上面数以千计的 SaaS 应用和 Salesforce 千亿美金的市值。
只是,我不清楚从元数据到领域对象的映射,Salesforce 具体是怎么做的,是通过他们的语法糖 Apex?如果没有领域对象,他们的业务代码要怎么写呢?反正据在 Salesforce 里面做 vendor 的同学说,他们所谓的 Low-Code,里面还是有很多用 Apex 写的代码,而且可维护性一般。
anyway,我们绝大部分的应用都是面向确定问题域的,不需要像 Salesforce 那样提供“无边际”的扩展能力。在这种情况下,我认为,领域对象是最好的连接数据模型和业务逻辑的桥梁。
,相关链接:
[1] https://github.com/alibaba/COLA
[2] https://developer.salesforce.com/wiki/multi_tenant_architecture