Что такое разработка, основанная на компонентах?

Компонентный термин развития начинает широко использоваться, особенно. в связи с инверсией управления.

  • Что это такое?
  • Какие проблемы он разрешает?
  • Когда это подходит, а когда нет?

Ответы

Ответ 1

Что это?

Я думаю, что определение в вашем ответе хорошо освещает этот вопрос. Хотя, я сомневаюсь, почему определение включает в себя, что компонент должен явно определять свои зависимости. Канонический пример компонента - это элемент управления ActiveX - им нужно явно определять свои зависимости?

Какие проблемы он разрешает?

Управление сложностью. Он направлен на решение этой проблемы, позволяя вам когда-либо думать о реализации компонента. Нужно только создавать компоненты для авторов, не следует думать о том, как их сочетать или управлять ими. Это делается с помощью некоторых фреймворков или инфраструктуры, внешних по отношению к компоненту и несущественных для автора компонента.

Когда это подходит, а когда нет?

Не обязательно подходит в приложении с треугольником или отбрасыванием. Плохой запах в архитектуре компонентов - это если вы тратите время на размышления или работу над инфраструктурой, чтобы управлять и комбинировать компоненты, а не сами компоненты.

Ответ 2

Разработка на основе компонентов не является чем-то новым. Я не знаю разработки, основанной на компонентах, но я собираюсь считать ее CBD. Это как Unix разработан, куча замещаемых небольших программ, каждый из которых делает что-то очень хорошо. На настольной арене Delphi VCL успешно использует компоненты с богатыми многоразовыми компонентами и сторонним рынком, как никто другой. Сейчас мы видим возрождение КБР, поскольку некоторые технологии созревают. Например, простые веб-приложения развиваются в SOA и RESTful WS. Все ребята из Java говорили о модульности и IoC.

Ответ, который вы ищете, скорее всего, будет найден в Почему и что из-за инверсии управления Ke Jin.

Кроме того, императивное естественное эти классические языки программирования OO имеют тенденцию пропустить лес (высокоуровневый архитектуры/структуры) для деревья (низкоуровневое логическое управление процедурный код). Разработка и инженеры по техническому обслуживанию, существующее приложение должно его устаревший дизайн/архитектура документы и код низкого уровня комментарии/модель.

Разработка на основе компонентов (CBD) парадигма решает два вопроса выше путем смещения логики водопровода в структуры, которые манипулируют компонентами и настроить приложения на основе пользователи/разработчики предоставили декларативные описания. Вопреки общей путаница, такая декларативная описания не должны быть сценарии установки приложений. Скорее, их основной целью является явно выражать заявку архитектуры/структуры без обязательность их императивной сантехники процедур (а именно, а не как). Цель КБР парадигма заключается в поддержке эффективных и гибких прикладных композиций эти рамки и разработчики приложений сосредоточены на бизнес-логика и проблемы с доменом без применения сантехники низкого уровня Сложности.

Структуры КБР, которые объединяют декларативные описания приложений и техника IoC упоминается как рамки IoC. Вопреки их предшественники, рамки IoC неинвазивных и использовать сценарий вставки/настройки зависимости/конфигурации.

Согласно Википедии, компонентное развитие является псевдонимом для Разработка программного обеспечения на основе компонентов (CBSE).

[Это] является подразделением программного обеспечения техники, приоритетом которой является разделение озабоченностей в отношении широкой функциональности доступный во всем данном программном обеспечении система.

Это несколько расплывчато, поэтому давайте рассмотрим более подробную информацию.

Индивидуальный компонент - это программное обеспечение пакета или модуля, который инкапсулирует набор связанных функции (или данные).

Все системные процессы помещаются в отдельных компонентов, чтобы все данные и функции внутри каждого компонент семантически связаны (так же как и с содержанием классы). Из-за этого принципа, часто говорят, что компоненты модульной и сплоченной.

Итак, согласно этому определению, компонент может быть любым, если он делает что-то очень хорошо и только одно.

Что касается общесистемного координация, компоненты связи друг с другом через интерфейсы. [...] Этот принцип приводит к компонентам, называемым инкапсулированными.

Итак, это все больше напоминает то, что мы думаем о хорошем API или SOA, должно выглядеть.

Представленные интерфейсы представлены леденцом и требуемые интерфейсы представлены символом открытого сокета, прикрепленным к внешнему краю компонента в UML.

alt text http://upload.wikimedia.org/wikipedia/en/2/25/Component-based_Software_Engineering_%28CBSE%29_-_example_2.gif

Еще один важный атрибут компонентов состоит в том, что они подставляемый, так что компонент может быть заменен другим (на времени разработки или времени выполнения), если требования исходного компонента (выраженные через интерфейсы) выполнены с помощью компонента-преемника.

Повторное использование является важным характерный для высокого качества программного компонента. Программное обеспечение компонент должен быть разработан и реализовано так, чтобы его можно было повторно использовать во многих разных программах.

Подстановка и повторное использование - это то, что делает компонент компонентом. Итак, какая разница между этим и объектно-ориентированным программированием?

Идея в объектно-ориентированном программирование (ООП) - это программное обеспечение должны быть написаны в соответствии с ментальная модель фактического или воображаемого объекты, которые он представляет. [...]

Разработка программного обеспечения на основе компонентов, напротив, не делает таких предположения, и вместо этого заявляет, что программное обеспечение должно быть разработано путем склеивания сборные компоненты вместе как в области электроники или механика.

Ответ 3

Я не уверен, что это "широко распространенная" терминология, но в VCS (Version Control System) я знаю два способа управления набором файлов, необходимых для сборки программы:

  • системный подход, где весь набор имеет общий жизненный цикл и должен быть помечен как все
  • компонентный подход, где отдельный набор файлов имеет собственный жизненный цикл и где мета-метка ссылается на все метки компонентов для обозначения всей системы по составу и зависимостям между этими компонентами.

Адаптивная архитектура используется для идентификации этих компонентов:

  • функциональный домен и приложения
  • сторонние библиотеки
  • рамки

Вот где IoC входит, поскольку он находится в основе любой структуры. Проблема, которую он решает, позволяет лучше определить часть вашего приложения:
Предположим, вы разработали приложение PLR (Profit and Loss), отвечающее за вычисление прибыли и убытков (позиции) трейдера.
Вы бы быстро поняли, что это не одно приложение, а состав нескольких:

  • GUI
  • пусковая
  • диспетчер (чтобы отправить вычисления на несколько серверов, потому что у вас не хватило бы памяти для вычисления всех!)
  • и т.д.

Затем вы можете определить структуру вычислений (Ioc), которая позволит вам подключать ваши разные модули, которые затем вызывается в нужное время вашей инфраструктурой.

Или вы можете идентифицировать чисто технические рамки (KPI, журналы, управления исключениями), которые затем могут использоваться любым из ваших других функциональных компонентов.

В рамках управления проектами это также позволяет вам самостоятельно разрабатывать каждую часть, обеспечивая при этом глобальную координацию через VCS.

Ответ 4

Здесь мое определение после некоторых исследований.

Разработка с использованием компонентов - это подход к разработке программного обеспечения, в котором код фрагментирован в многоразовые и тестируемые компоненты, которые объединены вместе, чтобы сформировать основу приложения для предоставления бизнес-функций. Комбинация и управление компонентами обычно делегируются Inversion of Control Контейнер.

Компонент сам по себе является классом, который реализует некоторый контракт на обслуживание и явно определяет зависимости, которые ему нужны для выполнения этого контракта. Фактическая реализация скрыта от всех остальных вне компонента.

Ссылки по теме:

Ответ 5

Я рассматриваю программную инженерию на основе компонентов как подход к разработке программных систем с помощью подключаемых компонентов; с компонентом, являющимся "единицей композиции с контрактными интерфейсами и явными контекстными зависимостями", которые "могут быть развернуты независимо и подчинены третьей стороне". (Clemens Szyperski, " Компонентное программное обеспечение: вне объектно-ориентированного программирования" )

CBSE облегчает повторное использование кода и быструю сборку гибких/адаптируемых программных систем.

Там есть существенные исследования, которые были посвящены этой теме в течение многих лет. Флагманское событие (Симпозиум ACM SIGSOFT по разработке программного обеспечения на основе компонентов) уже на 14-м году, и появилось немало новых тенденций.

Кроме того, если вы хотите хороший пример многоразовых, подключаемых и расширяемых компонентов, которые сегодня широко используются в промышленности, посмотрите MS Enterprise Библиотека.

Ответ 6

Если вы заинтересованы в объединении компонентов (или других многоразовых активов) в приложения, вы также должны взглянуть на программные продукты методология.

В линейке программных продуктов зависимости между компонентами (или элементами кода нижнего уровня) явно управляются вне этих компонентов. Обычно это делается с использованием модели функций, которая содержит такие правила, как

  • Эти два компонента не должны использоваться вместе (взаимная эксклюзивность)
  • Если этот компонент используется, то этот другой компонент должен использоваться или (взаимозависимость)
  • Можно использовать любую комбинацию некоторого определенного набора компонентов (необязательность)

Другие более сложные правила возможны в зависимости от сложности зависимостей, которые вы хотите моделировать.

Другим подходом, который иногда используется вместо моделирования объектов, является использование генератора кода для настройки различных компонентов, которые должны быть собраны в готовое приложение. Также возможно комбинировать моделирование функций с генерацией кода.

Помимо генерации кода, некоторые другие термины, которые вы можете искать в качестве моделирования для конкретного сайта, разработки программного обеспечения, основанного на модели, семейства программного обеспечения.

Ответ 7

Вы никогда не поймете, что на самом деле представляет собой компонентное развитие, пока вы не попытаетесь использовать Unity 3D. Это не ActiveX или что-либо, что вы когда-либо видели раньше, то, что вы видели ранее, имеет другое значение Component.

Развитие, основанное на компонентах, о каждом разговоре в последнее время, означает, что у вас есть 2 вещи:

  • Объект - который похож на объект в программировании ООП или объекте реального мира.
  • Компонент объекта - который является частью функциональности Object или одной из ее способностей.

Таким образом: Компонент - это не объект. Это - Функциональность объекта.

Итак, при стандартном программировании ООП, когда вам нужно расширить базовый объект с помощью новой функциональности, вам необходимо создать новый производный объект путем наследования базового объекта.

В разработке с компонентами, когда вам нужен расширенный объект, вы просто создаете пустой объект и заполняете его различными компонентами без какого-либо наследования. В разработке, основанной на компонентах, нет классов, вместо этого существует Prefabs - это предопределенные объекты с предопределенными компонентами с дочерними объектами.

Как я уже сказал, вы никогда не поймете, пока не попробуете. При разработке компонентов вы не должны всегда использовать программирование, вместо этого вы можете использовать графические редакторы, а также освобождает вас от Inheritance Hell типичного ООП. Компоненты сами программируются с помощью обычного программирования, но система более высокого уровня, включая объекты, в основном должна использовать и комбинировать компоненты в редакторе и получать поведение настраиваемых объектов.

Таким образом: Разработка с использованием компонентов дает вам:

  • Отличная возможность создавать вашу программную логику, используя только редактор, без программирования.
  • Освобождает ваш ум от афоризма. Делает разработку более простой и быстрой.
  • Делает вашу программу очень настраиваемой и масштабируемой, даже не касаясь кода. Меньше ошибок и ошибок.
  • Проще всего сохранить программный код, просто перепрограммируя определенные компоненты, не оказывая большого влияния на систему отдыха.
  • и т.д...

Я также хочу добавить, что программирование на основе компонентов (управляемое) не является заменой для программирования ООП, оно находится на вершине ООП или обычного программирования. Обычное программирование по-прежнему используется в CBP для реализации Компонент низкого уровня. Я думаю, что в этой статье также есть хорошее и краткое объяснение CBP: http://acmantwerp.acm.org/wp-content/uploads/2010/10/componentbasedprogramming.pdf