如无必要,勿增实体。这个原则在软件开发领域奉为圭臬。
我所在的项目组是从另一个项目中孵化并独立出来的,原先有若干子业务线同属于一个项目组,代码中有一个公用的字段区分不同的业务线,也叫做租户id。
项目组独立出来后,只有一个业务线,所以租户id都固定传入1。这使得租户id的传入成为了一个样板代码。于是在大约两年前,开始了一波去租户id的革命风潮。
租户id的设计是从数据存储阶段就设计好的,所以整个项目组的服务中都有各种各样的强制校验。自然,去租户id的运动最终失败了,部分链路不依赖租户id或者都默认填充1, 部分链路仍然强制校验租户id。而数据库中一直存储这租户id。现在导致租户id不单单是一个模版代码,还是一个无法正常使用的模板代码,因为没有人会知道他们传入的租户id会在那一层被悄悄的篡改为1
尽管租户id已经成为一个无法正常使用但又必须存在的系统寄生虫, 但是整个业务还是可以正常工作的, 偶尔看到的租户id,大家以及熟悉视而不见。
这个时候,N项目登场了。
出于商业上的考量,我们需要新创建一条业务线,复用目前的能力,但是实现细节更简单,未来的发展也明显不同。(一个是线上业务,一个是线下实体业务)。所以,租户是最理想的实现方式。
最早设计的租户id已经无法正常使用了,所以我们需要再给所有的系统,存量数据新增一个崭新的租户id字段,他的目的和最早的租户id一样。然而旧的租户id我们仍然不能把他下线,所以在n项目之后,我们的系统里就会出现两个租户id,有两套截然不同的租户判断和使用方式。