在面向对象的设计中,我们拥有SOLID原则和各种其他特殊设计指南.
您是否认为可以为OO定义等效的正规形式,这样一系列重构步骤可以将程序性的代码片段(或者设计不当的OO设计)转换为正确的(在一些明确定义的意义上)相同的功能?
(NB.很高兴制作这个社区维基)
这是可能的,但不太可能.上下文
首先,在关系模型出现的那些日子里,在IT部门工作的人受教育程度更高,他们尊重标准.计算机资源很昂贵,人们总是在寻找使用这些资源的最佳方式.像Codd和Date这样的人是人们高科技行业的巨头.
Codd没有发明Normalization,我们在关系出现之前很久就正在规范我们的非关系数据库.规范化是一种理论和实践,作为完全规范化原则出版.我们正在规范我们的程序,我们认为意外复制子程序(方法)是一个严重的错误.如今它被称为永不复制任何东西或不重复自己,但最近的版本不承认背后的声音学术理论,因此它的力量是未经批准的.
Codd所做的(在很多事情中)是专门为关系数据库定义正式的Normal Forms.从那时起,这些已经取得了进展并得到了改进.但他们也被非学术界人士劫持,目的是出售他们的装备.
由Codd和Chen发明并由Brown完成的数据库建模具有坚实的基础.在过去的25年里,它已经实现了标准化,并得到了许多其他有坚实基础的人的进一步完善和进步.
OO之前的世界
让我们在OO之前采用编程世界.我们有许多标准和惯例,用于对程序进行建模,以及特定于语言和平台的实现.你的问题根本不适用于那些日子.整个行业深刻理解数据库设计和程序设计是两种不同的科学,并使用不同的建模方法,加上适用的标准.人们没有讨论他们是否实施标准,他们讨论了他们遵守标准的程度;他们没有讨论他们是否模拟了他们的数据和程序,他们讨论了他们模拟数据和程序的程度.这就是我们如何让人类登上月球,特别是在1969年.
OO的黎明
OO出现并呈现自己,好像之前没有其他编程语言或设计方法.它没有使用现有的方法并扩展或改变它们,而是否认它们的存在.因此,毫不奇怪,从头开始制定新方法需要20年时间,然后慢慢将它们推进到SOLID和Agile这一尚未成熟的地步;你的问题的原因.据说,在此期间,有超过二十种此类方法闪现并死亡.
甚至UML,可能是一个彻头彻尾的赢家,适用于任何编程语言遭受同样的疾病.它试图成为每个人的一切,同时否认存在成熟的方法论.
行业的消亡
随着MS的出现,“任何人都可以做任何事”的态度(暗示:你不需要正规教育或资格证书),专业的质量和自豪感已经丧失.人们现在从零开始发明东西,好像这个星球上没有人曾经做过这件事.今天的IT行业技术水平很低.你知道,但阅读这些页面的大多数人都不知道,有一种关系建模方法和一种标准.他们没有模型,工具.然后重新实施.并重新实施.像你说的那样重新分解.
OO支持者
问题在于,提出这些OO方法的人并不是专业人士中的巨人;他们只是非学术性的最强者.因出版书籍而闻名,不是因为同行的认可. Unskilled and unaware.他们的工具包中有One Hammer,每个问题看起来都像钉子一样.由于他们没有受过正式教育,他们不知道实际上数据库设计和程序设计是两门不同的科学;数据库设计非常成熟,具有强大的方法和标准,他们只是将他们闪亮的新锤子应用于每个问题,包括数据库.
因此,由于他们忽略了编程方法和数据库方法,从头开始发明轮子,这些新方法的进展非常缓慢.并且在类似人群的帮助下,没有良好的学术基础.
今天的程序有数百种未使用的方法.我们现在有程序来检测它.鉴于成熟的方法,我们可以防止这种情况.瘦客户端不是一个可以实现的目标,我们有一个科学产生它.我们现在有程序来检测“脏”数据并“清理”它.而在数据库市场的上端,我们只是首先不允许“脏”数据进入数据库.
我接受你认为数据库设计是一系列重新考虑因素,我明白你的意思.对我而言,这是一门科学(方法论,标准),可以消除不必重新考虑的因素.即使接受重新分解也是一个响亮的信号,即较旧的编程方法是未知的;目前的面向对象方法尚不成熟.与OO人合作令人烦恼的危险在于,这种方法本身可以培养对One Hammer心态的信心,当代码破裂时,他们没有一条腿可以站立;当系统坏了,整个系统坏了,它不是一件可以修理或更换的小件.
以Scott Ambler和Agile为例. Ambler公开花了20年时间,并与数据库行业的巨头争论,反对规范化.现在他拥有敏捷,虽然不成熟,但仍有希望.但它背后的秘密就是规范化.他改变了曲目.而且由于他过去的战争,他不能出来并诚实地宣布,并给予其他人应有的信誉,所以它仍然是一个秘密,你可以在没有宣布其基础的情况下找出敏捷.
预测
这就是为什么我说,鉴于在过去20年中证明了OO世界的微小进展;失败的20个左右的OO方法;该方法的浅薄性,目前的OO方法极不可能实现(单一)数据库设计方法的成熟和接受.它至少还需要10年,更可能是20年,并且它将被OO的一些替代品所取代.
因为有可能需要做两件事:
> OO支持者需要正规的高等教育.编程科学的良好基础.当然,任何人都可以做任何事情,但为了做好事,我们需要一个很好的基础.这将导致人们认识到重新保理是不必要的,它可以通过科学消除.
>他们需要打破他们对其他编程方法和标准的否定.这将打开通往建立OO的大门,或者采用其基础并将其合并到OO中.这将导致一个坚实和完整的面向对象方法.
真实世界的OO
显然我是从经验中说出来的.在我们的大型项目中,我们使用成熟的分析和设计方法,一个用于数据库,另一个用于功能.当我们进入代码切割阶段时,我们让OO团队使用他们喜欢的任何东西,仅用于他们的对象,这通常意味着UML.没有架构或结构或性能或膨胀软件或One Hammer或数百个未使用的对象的问题,因为所有这些都是在OO外部处理的.后来,在UAT期间,找到错误来源或快速做出必要的更改没有问题,因为整个结构都有文档化的结构;块可以更改.