如您所说,事件是减少类之间耦合的好工具。因此,尽管它可能涉及在不内置对事件的支持的情况下以某些语言编写其他代码,但它降低了总体情况的复杂性。
事件可以说是OO中最重要的工具之一(根据Alan Kay的说法- 对象通过发送和接收消息进行通信)。如果您使用对事件有内置支持的语言,或者将函数视为头等公民,那么使用它们就可以了。
即使在没有内置支持的语言中,类似Observer模式的样板数量也非常少。您也许可以在某个地方找到一个不错的通用事件库,在所有应用程序中使用该库以最小化样板。(通用事件聚合器或事件中介器在几乎任何类型的应用程序中都很有用)。
在小型应用程序中值得吗?我肯定会说是的。
- 使类彼此分离,可以使类依赖关系图保持干净。
- 可以单独测试没有任何具体依赖性的类,而无需考虑测试中的其他类。
- 没有任何具体依赖关系的类需要更少的单元测试来完整覆盖。
如果您在考虑“哦,但这实际上只是一个很小的应用程序,它并不重要”,请考虑:
- 小型应用程序有时最终会在以后与大型应用程序结合在一起。
- 小型应用程序可能至少包含某些逻辑或组件,以后可能需要在其他应用程序中重用这些逻辑或组件。
- 小型应用程序的需求可能会发生变化,从而引发了重构的需求,当将现有代码分离时,这将变得更加容易。
- 以后可以添加其他功能,提示需要扩展现有代码,而当现有代码已经解耦时,这也容易得多。
- 通常,松耦合的代码比紧耦合的代码花费的时间更少。但是紧密耦合的代码比松散耦合的代码需要更长的重构和测试时间。
总体而言,应用程序的大小不应成为是否保持类之间松散耦合的决定因素;SOLID原则不仅适用于大型应用程序,还适用于任何规模的软件和代码库。
实际上,在对松散耦合的类进行隔离的单元测试中节省的时间应该抵消在解耦这些类上花费的任何额外时间。