What is Component-Driven Development?
组件驱动的开发术语开始得到广泛的应用,特别是与控制反转有关的术语。
What is it?
号
我认为你答案中的定义很好地涵盖了这个问题。尽管如此,我还是怀疑为什么定义中包含组件需要显式定义其依赖关系的内容。组件的一个典型例子是ActiveX控件——它们需要显式定义它们的依赖项吗?
What problems does it solve?
号
复杂性管理。它试图通过只允许您考虑组件的实现来解决这个问题。一个人应该只需要编写组件,而不必考虑如何组合或管理它们。这是由组件外部的一些框架或基础结构完成的,对组件作者来说并不重要。
When is it appropriate and when not?
号
不一定适用于Trival或丢弃应用程序。组件体系结构中的坏味道是,如果您花时间思考或处理基础结构来管理和组合组件,而不是组件本身。
我不确定这是一个"广泛"的术语,但在VCS(版本控制系统)中,我知道两种方法来管理构建程序所需的一组文件:
- 基于系统的方法,其中所有集都有一个共同的生命周期,必须标记为"全部"
- 基于组件的方法,其中单个文件集有自己的生命周期,并且元标签引用组件的所有标签,以通过组成和这些组件之间的依赖关系来指定所有系统。
应用架构用于识别这些组件:
- 功能域与应用
- 第三方图书馆
- 框架
这就是国际奥委会的切入点,因为它是任何框架的基础。它解决的问题是允许您更好地识别应用程序的部分:假设您设计了一个PLR(损益)应用程序,负责计算交易员的损益(头寸)。您很快就会意识到它不是一个单一的应用程序,而是由以下几个部分组成:
- GUI
- 发射器
- Dispatcher(在多台服务器上调度计算,因为一台服务器没有足够的内存来计算全部!)
- 等等。
然后,您可以确定一个计算框架(IOC),它将使您能够插入不同的模块,然后框架在正确的时间调用这些模块。
或者,您可以确定纯技术框架(KPI、日志、异常管理),然后这些框架可以被任何其他功能组件使用。
在项目管理方面,这也允许您独立开发每个部分,同时通过VCS确保全球协调。
基于组件的开发并不是什么新鲜事。我不知道组件驱动开发,但我假设它是CBD。这就是Unix的设计方式,一堆可替换的小程序,每一个都做得很好。在桌面领域,Delphi的VCL已经成功地使用了具有丰富可重用组件和第三方市场的组件。随着一些技术的成熟,我们现在看到CBD的复兴。例如,简单的Web应用程序正在演变为SOA和RESTful WS。所有的Java成员都在谈论模块化和IOC。
你正在寻找的答案可能会在"为什么"和"什么"中找到。
Besides, the imperative natural of
these classic OO programming languages
tend to miss the forest (high-level
architectures/structures) for the
trees (low-level logic control
procedural code). Development and
maintenance engineers taking over an
existing application have to rely on
its out of date design/architecture
documents and low level code
comments/patterns.The component-based development (CBD)
paradigm tackles the two issues above
by shifting plumbing logic into
frameworks that manipulate components
and set up applications based on
users/developers provided declarative
descriptions. Contrary to the common
confusion, such declarative
descriptions are not meant to be
application setup scripts. Rather,
their fundamental intention is to
explicitly express application
architectures/structures without
mandating their imperative plumbing
procedures (namely describe the what
instead of the how). The goal of CBD
paradigm is to support effective and
flexible application compositions by
these frameworks and having
application developers focus on
business logic and domain issues
without concerning low-level plumbing
complexities.CBD frameworks that combine the
declarative application descriptions
and the IoC technique are referred to
as IoC frameworks. Contrary to their
predecessors, IoC frameworks are
non-invasive and use the
dependency/configuration injection/setting scenario.
号
根据维基百科,基于组件的开发是基于组件的软件工程(CBSE)的别名。
[It] is a branch of software
engineering, the priority of which is
the separation of concerns in respect
of the wide-ranging functionality
available throughout a given software
system.
号
这有点含糊,所以让我们看看更多细节。
An individual component is a software
package, or a module, that
encapsulates a set of related
functions (or data).All system processes are placed into
separate components so that all of the
data and functions inside each
component are semantically related
(just as with the contents of
classes). Because of this principle,
it is often said that components are
modular and cohesive.
号
因此,根据这个定义,组件可以是任何东西,只要它做得很好并且只有一件事。
With regards to system-wide
co-ordination, components communicate
with each other via interfaces. [...]
This principle results in components referred to as encapsulated.
号
这听起来越来越像我们所认为的好的API或SOA。
提供的接口由棒棒糖表示,所需的接口由连接到UML中组件外边缘的开放套接字符号表示。
。(来源:wikimedia.org)
Another important attribute of
components is that they are
substitutable, so that a component
could be replaced by another (at
design time or run-time), if the
requirements of the initial component
(expressed via the interfaces) are met
by the successor component.Reusability is an important
characteristic of a high quality
software component. A software
component should be designed and
implemented so that it can be reused
in many different programs.
号
可替换性和可重用性使组件成为组件。那么这和面向对象编程有什么区别呢?
The idea in object-oriented
programming (OOP) is that software
should be written according to a
mental model of the actual or imagined
objects it represents. [...]Component-based software engineering,
by contrast, makes no such
assumptions, and instead states that
software should be developed by gluing
prefabricated components together much
like in the field of electronics or
mechanics.
号
我将基于组件的软件工程视为一种通过使用可插拔组件来开发软件系统的方法;其中组件是"一个具有合同规定接口和明确上下文依赖性的组合单元",它"可以独立部署,并且受第三方组成的影响。"(Clemens Szyperski,"组件软件:超越面向对象编程")
CBSE有助于代码重用和灵活/适应性软件系统的快速组装。
有一项多年来一直关注这个问题的大量研究。旗舰活动(基于组件的软件工程的ACM Sigsoft研讨会)现在已经是第14年了,并且出现了许多新的趋势。
另外,如果您希望有一个可重用、可插拔和可扩展组件的好例子,这些组件目前在业界大量使用,请看一看MS企业库。
这是我做了一些研究后的定义。
组件驱动开发是软件开发中的一种方法,其中代码被分割成可重用和可测试的组件,这些组件组合在一起形成用于交付业务功能的应用基础。组件的组合和管理通常委托给控制容器的反转。
组件本身是一个实现某些服务约定并显式定义实现此约定所需依赖项的类。实际实现对组件之外的所有其他人都是隐藏的。
相关链接:
- 组件驱动开发和IOC容器
如果您有兴趣将组件(或其他可重用资产)组合到应用程序中,那么您还应该看看软件产品线方法。
在软件产品线中,组件(或较低级别的代码元素)之间的依赖关系是在这些组件之外显式管理的。这通常是使用包含规则的功能模型来完成的,例如
- 这两个部分不能一起使用(相互排他性)
- 如果使用此组件,则必须使用此其他组件或(相互依赖性)
- 可以使用某些特定组件集的任何组合(可选性)
其他更复杂的规则可能取决于您想要建模的依赖项的复杂性。
另一种有时被用来代替特征建模的方法是使用代码生成器来配置要组装到最终应用程序中的不同组件。也可以将特征建模与代码生成结合起来。
除了代码生成之外,您还可以搜索其他一些术语,如领域特定的建模、模型驱动的软件开发、软件系列。
你永远不会理解什么是真正的组件驱动开发,除非你尝试使用Unity 3D。它不是ActiveX或你以前见过的任何东西,你以前见过的有另一个组件的意义。
组件驱动的开发,关于最近谈论的每一个,意味着,您有两件事:
因此:组件-不是对象。它是一个对象的功能。
因此,在标准OOP编程中,当需要用新功能扩展基对象时,必须通过继承基对象来生成新的派生对象。
在组件驱动的开发中,当需要扩展对象时,只需创建空对象并用不同的组件填充它,而不需要任何继承。在组件驱动的开发中,没有类,而是有序言——它是带有预定义组件和子对象的预定义对象。
正如我说的,你不努力就永远不会明白。对于组件驱动的开发,您不必总是使用编程,您可以使用图形编辑器,而且它可以让您从典型OOP的继承地狱中解脱出来。组件本身使用常规编程进行编程,但更高级别的系统(包括对象)通常只需要在编辑器中使用和组合组件并接收定制的对象行为。
因此:组件驱动的开发为您提供了:
我还想补充一点,基于组件的(驱动的)编程不是OOP编程的替代品,它位于OOP或常规编程之上。CBP中仍然使用常规编程来实现低级组件。我认为这篇文章对CBP也有很好和简短的解释:http://acmantwerp.acm.org/wp-content/uploads/2010/10/componentbasedprogramming.pdf