最佳实践-是否应将元数据和功能定义数据混合在一起?

时间:2020-03-06 15:03:08  来源:igfitidea点击:

考虑一个简单的新闻文章Web应用程序的情况,该Web应用程序的DB表列为"状态",可以通过以下单选按钮集访问该表:

状态[x]发布[]草稿[]存档

...其中"发布"公开显示了一篇文章,而"草稿"和"存档"则没有。从功能上说,"草稿"和"存档"执行相同的操作,但带有添加的元数据含义。 "显示"和"隐藏"这两个功能状态以及元数据"发布","草稿"和"存档"在"状态"的同一列中混合在一起。

这是一个好习惯吗?尽管这是一个非常简单的案例,但较大的案例可能会揭示这种做法的缺陷(或者不存在)。

解决方案

在这种情况下,我会说这是适当的功能。

我们都已经在媒体上看到WTF,有人不小心点击了show [x]
和草稿[x]同时进行。

现在,不可能意外显示草稿。这在报纸上很重要,因为记者臭名昭著,例如:

StackOverflow的John Doe说:" ---我不记得那个丑陋的家伙所说的内容。请检查磁带,然后再填写。"

可能不应该打印。

功能状态与行为有关,不需要在数据库中对其进行建模。如果业务逻辑仅关心状态为"已发布"的"显示"文章,则没有理由使用"显示"列将数据的复杂性加倍。

在我们决定业务逻辑需要其他数据来决定是显示还是隐藏文章(也许是IsApproved标志)时,我们可以存储该数据。

如果我们要从另一角度看待它,如果我们要添加另一列"显示",那么状态为"草稿"和"显示" = 1的文章将如何处理?根据业务规则,这是无效状态。