控制反转

组件驱动开发术语开始得到广泛应用,尤其是, 与控制反转有关。

  • 它是什么?
  • 它解决了什么问题?
  • 什么时候适合,什么时候不适合?

  • 它是什么?

    我认为你的答案中的定义很好地涵盖了这个问题。 虽然,我质疑为什么定义包括组件需要明确定义其依赖关系。 一个组件的典型例子是一个ActiveX控件 - 它们是否需要显式地定义它们的依赖关系?

    它解决了什么问题?

    管理复杂性。 它试图通过让你只考虑组件的实现来解决这个问题。 人们只需要编写组件,但不应该考虑如何组合或管理它们。 这由组件外部的一些框架或基础设施完成,对组件作者不重要。

    什么时候适合,什么时候不适合?

    不一定适用于繁琐的应用程序或抛弃应用程序。 组件架构中的难闻气味是,如果您花时间思考或处理基础架构以管理和组合组件,而不是组件本身。


    我不确定这是一个“广泛”的术语,但在VCS(版本控制系统)中,我知道有两种方法来管理构建程序所需的一组文件:

  • 基于系统的方法,其中所有集合具有共同的生命周期并且必须被标记为all
  • 基于组件的方法,其中单独的一组文件具有其自己的生命周期,并且元标签引用组件的所有标签以通过这些组件之间的组合和依赖性来指定所有系统。
  • 应用架构用于识别这些组件:

  • 功能域和应用程序
  • 第三方库
  • 构架
  • 这是IoC的出现,因为它是任何框架的基础。 它解决的问题是让你更好地识别你的应用程序的一部分:
    假设您设计了一个PLR(利润和损失)应用程序,负责计算交易者的收益和损失(头寸)。
    你会很快意识到它不是一个单一的应用程序,而是由几个组成:

  • GUI
  • 发射台
  • 调度器(将计算分派到多个服务器,因为没有足够的内存来计算所有!)
  • 等等
  • 然后,您可以确定一个计算框架(Ioc),它可以让您插入不同的模块,然后在框架的适当时间调用这些模块。

    或者您可以确定纯粹的技术框架(KPI,日志,异常管理),然后可以由您的任何其他功能组件使用。

    就项目管理而言,这也使您可以独立开发各个部分,同时通过VCS确保全球协调。


    基于组件的开发没有什么新意。 我不知道组件驱动开发,但我将假设它是CBD。 这就是Unix的设计方式,大量可替换的小程序都很好地完成了一件事。 在桌面领域,Delphi的VCL成功地使用了丰富的可重用组件和第三方市场。 随着一些技术的成熟,我们正在看到CBD的复兴。 例如,简单的Web应用程序正在向SOA和RESTful WS发展。 所有Java人都在谈论的是模块化和IoC。

    您正在寻找的答案可能会在柯金的“为什么以及为什么控制反转”中找到。

    此外,这些经典的OO编程语言的必然自然倾向于错过树(低级逻辑控制程序代码)的森林(高级架构/结构)。 接管现有应用程序的开发和维护工程师必须依赖过时的设计/体系结构文档和低级代码注释/模式。

    基于组件的开发(CBD)范式通过将管道逻辑转换为操作组件并根据用户/开发者提供声明性描述来设置应用程序的框架来解决上述两个问题。 与常见的混淆相反,这种声明性描述并不意味着应用程序设置脚本。 相反,他们的根本意图是明确表达应用程序架构/结构而不强制其必要的管道过程(即描述什么而不是如何)。 CBD范式的目标是通过这些框架支持有效和灵活的应用程序组合,让应用程序开发人员专注于业务逻辑和领域问题,而不必关心低层次的管道复杂性。

    结合声明性应用程序描述和IoC技术的CBD框架被称为IoC框架。 与他们的前辈相反,IoC框架是非侵入式的,并使用依赖/配置注入/设置方案。

    根据维基百科,基于组件的开发是基于组件的软件工程(CBSE)的别名。

    [它]是软件工程的一个分支,其优先级是关于在整个给定的软件系统中可用的广泛功能方面的分离问题。

    这有些模糊,所以让我们看看更多的细节。

    单个组件是封装一组相关功能(或数据)的软件包或模块。

    所有的系统进程都被放置在单独的组件中,以便每个组件内的所有数据和函数在语义上是相关的(就像类的内容一样)。 由于这个原理,人们经常说组件是模块化和内聚的。

    因此,根据这个定义,一个组件可以是任何东西,只要它真的做得很好,而且只做一件事。

    关于系统协调,组件之间通过接口进行通信。 [...]这个原则导致组件被称为封装。

    因此,这听起来越来越像我们认为良好的API或SOA应该看起来像。

    提供的接口由棒棒糖表示,所需的接口由UML中的组件外边缘上的开放套接字符号表示。

    替代文字http://upload.wikimedia.org/wikipedia/en/2/25/Component-based_Software_Engineering_%28CBSE%29_-_example_2.gif

    组件的另一个重要属性是它们是可替代的,以便如果后继组件满足初始组件的要求(通过接口表示),则可以用另一个组件(在设计时或运行时)替换组件。

    可重用性是高质量软件组件的重要特征。 应该设计和实现一个软件组件,以便它可以在许多不同的程序中重复使用。

    可替代性和可重用性是使组件成为组件的原因。 那么这和面向对象编程有什么区别呢?

    面向对象编程(OOP)的思想是软件应该根据它所代表的实际或想象对象的心理模型来编写。 [...]

    相比之下,基于组件的软件工程没有做出这样的假设,而是指出应该通过将预制组件粘合在一起来开发软件,就像电子或机械领域一样。

    链接地址: http://www.djcxy.com/p/92235.html

    上一篇: inversion of control

    下一篇: Pushing an existing Git repository to Github only sends about half the commits?