OOP-事件可以并且应该成为抽象的一部分吗?

用户名

想象一下,我有一个对象系统,这些对象是事件发射器,并且还可以侦听其他对象中的事件。在此系统中,这些对象主要使用事件在它们之间进行通信。

我想遵循良好的面向对象的实践,我有兴趣为我的对象创建抽象。我将使用的实际语言没什么大不了的:例如,这些抽象可以是接口或抽象类。

这些抽象定义对象中的方法和属性,但不定义事件名称。新的实现可能决定引发完全新的事件……的确,您总是使用相同的方法引发它们,但是如果创建新的事件名称,我的印象是您违反了开放/闭合原则:我要说的是,这等同于添加新方法。

是否有一种方法可以以这种对象遵循的抽象状态来声明类似对象可能发出的事件?

我对这在Java,C ++,Javascript和Typescript等语言中的工作方式很感兴趣。我不确定,因为我不了解C#,但我认为在这种语言中,事件可以是接口的一部分。但是我对您如何使事件成为不直接支持其他语言的抽象语言的一部分感兴趣。

al

有效地以代码形式执行这些合同的能力将根据所使用的语言而有所不同,因此,最佳解决方案并非真正与语言无关的:每种语言都有一种惯用的处理方式。

可以用所有类型化的语言实现的一种解决方案是使每个事件都成为发射器并依靠合成。

基本上可以归结为someObject.onSomeEvent.listen(handler)而不是someObject.listenTo('someEvent', handler)

这是他们在重构DOM Events API时在Google Dart中使用的方法由于事件现在是类成员,因此可以轻松地成为代码契约的一部分。

显然还有其他方法,例如为每个事件创建一个具体的事件类,而不是使用字符串。此解决方案的优点是,添加新事件后,无需更改合同。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

构造函数是OOP的哪一部分?

聚合可以成为域事件的一部分吗?

`nullptr_t`应该成为全局名称空间的一部分吗?

了解OOP中的抽象

一个节点可以成为多个厨师环境的一部分吗

CloudFront 缓存,“request.uri”可以成为缓存键的一部分吗?

动作可以成为 MVVM 的 ViewModel 的一部分吗?

xml文件可以成为QT qrc资源文件的一部分吗

具有位置:相对的元素不应该成为常规文档流的一部分吗?

这些TLOG文件是什么?这些应该成为我的源代码管理的一部分吗?

抽象类和 oop

两个std :: atomic可以成为一个工会的一部分吗?

外键可以成为另一个表的组合主键的一部分吗?

Stanford coreNLP:句子中的单词可以成为多个共指链的一部分吗

编程语言可以成为平台的一部分吗?(与C#和Java相关)

您可以推送到 viewController 并成为该控制器导航的一部分吗?

联合和相交可以成为正则表达式的一部分吗?

Uber Cadence活动是否应该成为服务实施的一部分?

如何使#if #endif成为宏的一部分

是否使anchortext成为href的一部分?

JavaScript成为数组的一部分

有人可以解释有关Xlib中事件的这一部分吗?

“不变”属性是抽象定义的一部分吗?

Java如何成为“纯OOP语言”?

OOP PHP中的抽象类

PHP OOP抽象类子类注册

抽象类,OOP设计模式

创建View应该是View或ViewModel [MVVM]的一部分吗?

DDD - 乐观并发属性(etag 或时间戳)是否应该成为域的一部分?