面向UI编程?

Categories:

背景

前两天团队内在做数据库设计评审,其中有个数据库表对应的UI类似下面:

分区ABC
客厅
厨房
餐厅
次卧
天台

其中 ABC是同一个层级的东西,并列关系。
小伙伴设计的表就是将这个二维表原样翻译,

create table xxx (
   分区 VARCHAR(25),
   a VARCHAR(25),
   b VARCHAR(25),
   c VARCHAR(25)
)

介绍完小伙伴自己也提到这样可能不太好,因为后续一定会出现一些关联查询例如

 where type = 'A'
 where type in ('A', 'B' ) 
 // 按上面的表设计,关联语句就得写成
 where A=true or B=true

如果把表设计成ABC存一个字段就方便做这种关联查询,但是又得把原本的一条记录存成三条记录,所以小伙伴也有点纠结。

分区类型
客厅A
客厅B
客厅C
厨房A
厨房B
餐厅B
餐厅C
次卧B
天台A
天台C

我的观点

我觉得这里的一个核心问题就是,大家往往是面向UI编程,而不是面向逻辑编程。 如果UI改成一棵树状,你又怎样设计呢?

显然大家的表设计更多是会把ABC改成同一个字段存多行了。
发现没有,你的设计是随着UI的变化而变化的!
我们应该做的是面向逻辑做设计,UI只是一个展现形式而已。  

上面这个例子可能因为一些业务背景我不方便说,所以会看着有点云里雾里不以为然。
这不重要。我想表达的核心观点就是,关注逻辑,不要关注UI。
要根据业务逻辑来判断应该是(多个字段存在一行)还是(一个字段存成多行),而不是根据UI来。
面向UI编程往往就是偷懒而已,因为表结构和UI一致的话就直接CRUD就完事了,如果表结构和UI不一致的话还得做一些转化处理。

但其实一来这些数据格式和UI的转换工作没那么复杂,二来UI又不是不能改,也可以给UI提建议让他们改不是吗?

如果你觉得本文对你有帮助或不错,可略表心意,请我喝一杯冰可乐。

Comments