您如何定义软件组件以及 OOP 和组件编程之间存在什么样的关系?这些范式的优缺点和“黄金比例”是什么?
4 回答
我认为组件是比对象更高级别的组织概念。
组件通常是发布和部署的单元。您会期望定义它们公开的接口以及它们在其他组件和基础架构方面的依赖关系。系统中的不同组件很可能使用非常不同的技术来开发,实际上单个组件不需要是同质的。
如果使用某种 OO 语言开发组件,您将分解职责,并为该组件得出 OO 设计。
软件组件的粒度应该映射到重用的粒度。如果一块软件在其他地方被重用,那么它应该被版本化并作为它自己的组件发布。如果它没有在其他地方重用,那么这增加的价值很小。
如果任何小于一个完整类的东西都被认为是一个组件,并且预期类的集合将形成一个组件,那将是令人惊讶的。
我认为组件编程本质上是对 oo 的再发明。
oo 的目标是成为黑匣子……但不是,组件编程正试图成为黑匣子。
因此,我认为组件编程意味着过度工程(以积极的方式) - 因为为了成为黑匣子,您必须预测未来的用例并已经迎合它们。
它还暗示了彻底测试文档的心理学,以我的经验,无论如何似乎在oo编码中退居二线。
因此,您将提供线程和异步支持。您将发布接口、文档和单元测试。具有清晰的事件结构和行为。
基本上你可以允许某人重复使用它并帮助他们这样做。
关键是组件具有定义良好的接口和定义良好的功能。实际的实现细节不是其中的一部分,因为在考虑如何使用组件时它们超出了范围。即一个组件可以是一组相当复杂的对象。
我会将组件视为应用程序的子系统,您可以将其视为黑盒。
因此,在 OOD 中,一组类和接口具有明确的规范和一个明确的目的,允许您执行一些计算而无需知道盒子是由什么组成的。
输入 -> [ 黑盒 ] -> 输出
进一步识别组件的是:
- 高内聚力
- 与应用程序的其余部分没有依赖关系,因此可以轻松地将组件导入一个或多个项目中。
我认为组件编程实际上是组装组件以构建更大的应用程序。
在一个非常“乌托邦”的观点中,应该有公共存储库,您可以在其中查找满足您的规范的组件。找到组件后,您可以将其集成到您的应用程序中。