加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – smalltalk中的单一责任

发布时间:2020-12-17 04:20:03 所属栏目:百科 来源:网络整理
导读:如果 Single Responsibility Principle适用于OOP并且smalltalk(以及ruby也被认为是最OO语言之一)为什么Object类可以响应这么多消息? 来自Object methodDict的几个探索: 检查,探索,浏览,打印:on: 接受(所有对象上的访客模式?) copy,deepCopy,join,joinTo
如果 Single Responsibility Principle适用于OOP并且smalltalk(以及ruby也被认为是最OO语言之一)为什么Object类可以响应这么多消息?

来自Object methodDict的几个探索:

>检查,探索,浏览,打印:on:
>接受(所有对象上的访客模式?)
> copy,deepCopy,join,joinTo,at:,at:modify:
> asString,asFunction,asOrderedCollection(为什么不asSet?)
>海边的:asLink,asJson,asJavascript

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

编辑:其中一些是有意义的(asString,asOrderedCollection,accept,notify),而其他似乎很奇怪(at:,joinTo)

解决方法

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

像inspect,copy,deepCopy这样的反射方法在概念上取决于Object,但我同意有更好的反射架构(Mirrors).

现在,Smalltalk可能是一个理想的美丽原则,但你必须采取一些盐的特定实现:)

Smalltalk系统倾向于演变成大型单片系统,因为它很容易改变基础系统,并且因为它很容易将图像用作开发工件,绕过了持续集成的良好实践.最后,很多这些有趣的阶级责任归因于历史/实践原因;对于Squeak来说尤其如此,因为它主要是作为快速多媒体实验的平台而开发的,而不是用于软件工程教育或工业目的(Pharo的目标).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读