在数据库世界中,我们进行了标准化。您可以从设计开始,启动步骤,然后以正常的数据库形式结束。这是根据数据的语义完成的,可以认为是一系列的设计重构。

在面向对象的设计中,我们有SOLID原则和其他各种针对良好设计的特别指南。

您是否认为可以为OO定义正常形式的等效形式,以使一系列重构步骤可以将一段程序代码(或因果关系不佳的OO设计)转换为正确的(从某种意义上来说很明确)表达相同的功能?

(注意:很高兴制作此社区Wiki)

最佳答案

这是可能的,但可能性很小。

语境

首先,在关系模型出现的日子里,从事IT工作的人们受过更高的教育,并且尊重标准。计算机资源非常昂贵,人们一直在寻找使用这些资源的最佳方法。像Codd和Date这样的人都是高科技行业的巨头。

Codd并未发明规范化,我们早在Relational出现之前就在规范非关系数据库。规范化是一种理论和实践,已发布为“完全规范化原理”。我们正在规范我们的程序,我们认为意外复制subrotine(方法)是一个严重的错误。如今,它被称为“永不重复任何内容或不要重复自己”,但最近的版本并未承认背后的可靠学术理论,因此其功能尚未实现。

Codd所做的(在很多事情中)是专门为关系数据库定义正式的范式。从那时起,这些技术就不断进步和完善。但是他们也被非学术界劫持,目的是出售他们的装备。

由Codd和Chen发明并由Brown完成的数据库建模具有扎实的基础。在过去的25年中,它已经实现了标准化,并被许多扎实的基础进一步完善和发展。

面向对象的世界

让我们先介绍一下面向对象的编程世界。我们有许多标准和约定,用于对程序进行建模以及特定于语言和平台的实现。您的问题在当时根本不适用。整个行业深刻理解,数据库设计和程序设计是两种不同的科学,并且对它们使用不同的建模方法以及适用的任何标准。人们没有讨论是否执行标准,而是讨论了遵守标准的程度。他们没有讨论是否对数据和程序进行建模,而是讨论了对数据和程序进行建模的程度。这就是我们如何将人送上月球的方式,特别是在1969年。

OO的曙光

OO出现并自我介绍,就好像之前没有其他编程语言或设计方法一样。它没有使用现有方法并进行扩展或更改,而是拒绝了它们的存在。因此,毫不奇怪,花了20年的时间从​​头开始制定新的方法论,并将其逐步发展到不成熟的SOLID和Agile。您提出问题的原因。事实证明,在此期间,已经有二十多种此类方法出现并死亡。

甚至适用于任何编程语言的UML可能是一个彻底的赢家,也遭受了同样的疾病。它试图让所有人都接受,同时否认存在成熟的方法论。

行业灭亡

随着MS的出现,“任何人都可以做任何事情”的态度(暗示:您不需要正规的教育或资格),职业的素质和自豪感已经丧失。人们现在从头开始发明事物,就好像地球上没有人做过一样。今天的IT行业的技术水平很低。您知道,但是大多数阅读这些页面的人不知道,有一种关系建模方法和一种标准。他们不建模,不执行。然后重新执行。并重新执行。如您所说的进行重构。

面向对象的支持者

问题在于,提出这些面向对象方法的人并不是专业人员中的巨头。它们只是非学术领域中最有声望的。出名是由于出版书籍,而不是由于同行的认可。 Unskilled and unaware。他们的工具包中有One Hammer,每个问题都像钉子一样。由于他们没有受到正规的教育,所以他们不知道数据库设计和程序设计实际上是两种不同的科学;数据库设计已经相当成熟,已经建立了牢固的方法论和标准,他们只是将闪亮的新锤子应用于每个问题,包括数据库。

因此,由于他们不考虑编程方法和数据库方法,而是从头开始发明轮子,因此这些新方法进展非常缓慢。并且在类似的人群的帮助下,没有良好的学术基础。

今天的程序有数百种未使用的方法。我们现在有程序可以检测到这一点。鉴于成熟的方法论,我们可以避免这种情况。瘦客户机不是要实现的目标,我们拥有一门科学可以做到。我们现在有了检测“脏”数据并“清理”数据的程序。鉴于在数据库市场的高端市场,我们根本不允许首先将“脏”数据放入数据库。

我同意您将数据库设计视为一系列重构,我理解您的意思。对我来说,这是一门科学(方法论,标准),消除了重新构造的麻烦。即使接受重构,也是一个响亮的信号,表明旧的编程方法是未知的。当前的面向对象方法还不成熟。这种危险使与面向对象的人员一起工作变得很烦人,是该方法本身会激发人们对“一锤子”心态的信心,并且当代码破裂时,他们也站不住脚。当系统崩溃时,整个系统都将崩溃,这不是一个可以维修或更换的小部件。

以Scott Ambler和Agile为例。 Ambler花费20年的时间公开反对数据库标准化领域的巨头。现在他有了敏捷,尽管还不成熟,但他有希望。但是它背后的秘密是标准化。他已切换曲目。而且由于他过去的战争,他无法诚实地宣布这一点,并应给予他人应有的信誉,因此这仍然是一个秘密,您将不得不找出敏捷的基本面而不予以宣布。

预后

鉴于过去20年来OO领域的明显进展,这就是我说的原因。大约20种失败的OO方法论;由于方法的浅薄,当前的面向对象方法不太可能实现(单一)数据库设计方法的成熟度和接受度。这至少还需要10年,更可能是20年,并且将被OO的一些替代所取代。

要使其成为可能,需要发生两件事:


OO的支持者需要接受正规的高等教育。编程科学的良好基础。当然,任何人都可以做任何事情,但是要做伟大的事情,我们需要有良好的基础。这将导致人们认识到不必要进行重构,可以通过科学消除重构。
他们需要打破对其他编程方法和标准的否认。这将为在此基础上构建OO或将其基础并合并到OO中打开大门。这将导致一个坚实而完整的面向对象方法。


现实世界

显然我是根据经验说话的。在我们的大型项目中,我们使用成熟的分析和设计方法,一种用于数据库,另一种用于功能。当我们进入代码削减阶段时,我们让OO团队仅将其喜欢的对象用于其对象,这通常意味着UML。架构,结构或性能,膨胀软件,一把锤子或数百个未使用的对象都没有问题,因为所有这些都是由外部OO处理的。后来,在UAT期间,因为整个结构都有文档化的结构,所以在查找错误的来源或快速进行所需的更改方面没有问题。块可以更改。

10-01 17:01
查看更多