Фреймворки против SDK - PullRequest
       8

Фреймворки против SDK

28 голосов
/ 08 января 2009

В чем разница между фреймворком и SDK? Взять, к примеру, SDK для платформы MS и платформу .NET. Оба имеют API-интерфейсы, оба скрывают свою внутреннюю работу, и оба предоставляют функциональность, которая в противном случае не может быть быстро / легко доступна (другими словами, они служат реальной цели).

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

Спасибо!

РЕДАКТИРОВАТЬ: Этот вопрос относится к SDK и фреймворкам в целом, а не только к двум упомянутым выше.

Ответы [ 8 ]

40 голосов
/ 08 января 2009

Я просто скопирую из Википедии:

Библиотека:

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

Framework:

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

SDK:

Комплект для разработки программного обеспечения (SDK или «devkit»), как правило, представляет собой набор инструментов для разработки, который позволяет разработчику программного обеспечения создавать приложения для определенного пакета программного обеспечения, структуры программного обеспечения, аппаратной платформы, компьютерной системы, игровой консоли, операционной системы. или аналогичная платформа. Это может быть что-то столь же простое, как интерфейс прикладного программирования в форме некоторых файлов для взаимодействия с конкретным языком программирования или включающее в себя сложное аппаратное обеспечение для связи с определенной встроенной системой. Общие инструменты включают средства отладки и другие утилиты, часто представленные в IDE. SDK также часто включают образцы кода и сопроводительные технические примечания или другую сопроводительную документацию, чтобы помочь прояснить моменты из основного справочного материала.

Итак:

  • Библиотека - это код, который вызывает ваше приложение.
  • Framework - это приложение или библиотека, которые почти готовы. Вы просто заполняете некоторые пустые места своим собственным кодом, который вызывает фреймворк.
  • SDK - это более широкое понятие, поскольку оно может включать библиотеки, фреймворки, документацию, инструменты и т. Д.
  • .NET действительно больше похожа на платформу, а не на программную среду.
15 голосов
/ 08 января 2009

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

Таким образом, вы можете разработать Framework, состоящий исключительно из библиотек, но если вы назовете его SDK, вы должны будете предложить что-то для поддержки разработки.

8 голосов
/ 08 января 2009

В двух словах разница:

  • Вы вызываете функции SDK.
  • Фреймворк вызывает ваши функции.

SDK - это как набор инструментов с множеством инструментов, и вы выбираете, какие из них использовать и как. У вас есть контроль, но и много решений. Это довольно низкий уровень.

Фреймворк принимает много решений за вас, поэтому вам не нужно изобретать велосипед; Это скорее подход "заполнить пробелы". Меньше свободы, но вы сэкономите много времени и, возможно, избежите некоторых ошибок.

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

1 голос
/ 08 января 2009

Я был лидером в Zend Framework в версии 1.0. Мы часто получали комментарии о том, что это не «фреймворк» в том смысле, в котором ожидали разработчики - они сказали, что это скорее библиотека классов.

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

Zend Framework был разработан для слабой связи, так что вы можете использовать любой из классов, если хотите. Это наложило несколько соглашений на ваш код или вашу базу данных. И мы собирались разработать генераторы кода, но еще не реализовали их.

Но я все еще чувствовал, что Zend Framework квалифицируется как фреймворк, а не как SDK, другим способом: фреймворк расширяемый . Он разработан как набор объектно-ориентированных базовых классов, и предполагается, что разработчики либо extend эти классы, либо пишут простые подключаемые классы, чтобы добавить функциональность.

Традиционный SDK не расширяемый . Вы просто вызываете методы API в предоставленных классах, они делают то, что делают, и вы работаете с результатом. Любая настройка заключается в том, как вы используете API и как вы используете результаты.

1 голос
/ 08 января 2009

Это серая область, но Frameworks, как правило, являются библиотеками, против которых вы кодируете, в SDK часто есть дополнительные инструменты, которые помогут вам извлечь больше пользы из Framework. Хорошим примером является .NET Framework SDK, который вы устанавливаете отдельно, SDK имеет дополнительные инструменты, такие как ildasm, cordb, которые на самом деле не являются частью фреймворка.

1 голос
/ 08 января 2009

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

Вместо этого Microsoft Framework является обязательным, если вы хотите запускать приложения .NET на компьютере.

0 голосов
/ 29 октября 2012

В одном сравнении вы могли бы сказать:
Библиотека -> Каркас -> SDK
Framework состоит из нескольких библиотек, а также некоторых инструментов (компиляторов и т. Д.) И не ориентирован на конкретную платформу. Для платформы может быть разработано несколько платформ, каждая из которых предназначена для разных целей. SDK предлагает вам фреймворки и все остальное, что вам нужно для разработки программного обеспечения для конкретной платформы.

0 голосов
/ 08 января 2009

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

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

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

...