gpt4 book ai didi

ruby - Smalltalk 中的单一职责

转载 作者:数据小太阳 更新时间:2023-10-29 06:57:18 25 4
gpt4 key购买 nike

如果Single Responsibility Principle适用于OOP,smalltalk(还有ruby)被认为是最面向对象的语言之一,为什么Object类可以响应这么多消息?

Object methodDict explore 中的一些内容:

  • 检查、探索、浏览、打印:在:
  • 接受(所有对象的访问者模式?)
  • 复制,深度复制,加入,加入,在:,在:修改:
  • asString、asFunction、asOrderedCollection(为什么不也用 asSet?)
  • 海边的:asLink、asJson、asJavascript

这不是对象的责任(例如,用户域模型应该只对其私有(private)消息、付款等感兴趣)

编辑:其中一些是有意义的(asString、asOrderedCollection、accept、notify),而另一些看起来很奇怪(at:、asFunction、deepCopy、join、joinTo)

最佳答案

您必须考虑 Smalltalk 的模块化特性。也就是说,方法定义独立于类定义,因此 Object 上的方法可以与它们相关的应用程序(例如,Seaside)一起打包。这些扩展方法不是基本系统的一部分,因此从它们所属的包的角度来看,它们只是将职责添加到它们的类中。其中许多方法都是简单的双分派(dispatch)点:如果 anObject asFoo 只是委托(delegate)给 Foo fromObject: anObject,我不会说它给类增加了很多责任。

inspectcopydeepCopy 等反射方法在概念上在 Object 上占有一席之地,但我同意有更好的反射架构(Mirrors)。

现在,Smalltalk 可能是具有优美原则的理想选择,但您必须对特定的实现有所保留 :)

Smalltalk 系统有演变成大型单体系统的趋势,因为更改基础系统非常容易,而且很容易将图像用作开发工件,绕过持续集成的良好实践。最后,很多这些有趣的类职责都是由于历史/实际原因造成的; Squeak 尤其如此,因为它主要是作为快速多媒体实验平台开发的,而不是用于软件工程教育或行业目的(Pharo 的目标)。

关于ruby - Smalltalk 中的单一职责,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4848889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com