Что такое программный каркас?

Может кто-нибудь объяснить мне, что такое программный каркас? Зачем нам нужны рамки? Что делает фреймворк для облегчения программирования?

12 ответов

Я очень поздно, чтобы ответить на него. Но я хотел бы поделиться одним примером, о котором я только подумал сегодня. Если бы я сказал вам отрезать лист бумаги размером 5 на 5 метров, то вы наверняка это сделаете. Но предположим, я прошу вас разрезать 1000 листов бумаги одинаковых размеров. В этом случае вы не будете делать измерения 1000 раз; очевидно, вы бы сделали рамку 5 на 5 метров, а затем с помощью нее вы сможете разрезать 1000 листов бумаги за меньшее время. Итак, вы сделали каркас, который выполнял бы определенный тип задач. Вместо того, чтобы снова и снова выполнять одни и те же задачи для одних и тех же типов приложений, вы создаете среду, в которой все эти средства объединены в один симпатичный пакет, что обеспечивает абстракцию для вашего приложения и, что более важно, для многих приложений.

Технически, вам не нужны рамки. Если вы делаете действительно очень простой сайт (вспомните Интернет еще в 1992 году), вы можете просто сделать все это с помощью жестко запрограммированного HTML и немного CSS.

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

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

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

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

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

Резюме в Википедии (Software Framework) (первое попадание Google между прочим) объясняет это довольно хорошо:

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

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

  1. инверсия управления - в среде, в отличие от библиотек или приложений обычного пользователя, общий поток управления программой определяется не вызывающей стороной, а структурой.[1]
  2. поведение по умолчанию - у платформы есть поведение по умолчанию. Это поведение по умолчанию на самом деле должно быть некоторым полезным поведением, а не серией неактивных операций.
  3. расширяемость. Платформа может быть расширена пользователем обычно путем выборочного переопределения или специализированного пользовательского кода, обеспечивающего определенные функциональные возможности.
  4. немодифицируемый код платформы - код структуры, как правило, не может быть изменен. Пользователи могут расширять структуру, но не изменять ее код.

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

Уже много хороших ответов, но позвольте мне посмотреть, могу ли я дать вам другую точку зрения.

Если немного упростить вещи, вы можете рассматривать фреймворк как завершенное приложение, за исключением фактической функциональности. Вы подключаете функциональность и PRESTO! у вас есть приложение.

Рассмотрим, скажем, структуру GUI. Каркас содержит все необходимое для создания приложения. Действительно, вы часто можете просто сделать минимальное приложение с очень небольшим количеством строк исходного кода, которое абсолютно ничего не делает - но оно дает вам управление окнами, управление подокнами, меню, панели кнопок и т. Д. Это сторона структуры. Добавляя функциональность вашего приложения и "подключая его" к нужным местам в фреймворке, вы превращаете это пустое приложение, которое делает только управление окнами и т. Д., В настоящее полноценное приложение.

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

Я еще раз подчеркиваю, что это упрощенное представление о том, что такое основа. Я не использую такие страшные термины, как "Инверсия контроля" и т. П., Хотя в большинство фреймворков встроены такие страшные понятия. Поскольку вы новичок, я подумал, что избавлю вас от жаргона и пойду с простым сравнением.

Я не уверен, что есть четкое определение "рамки". Иногда большой набор библиотек называют фреймворком, но я думаю, что типичное использование этого слова ближе к определению, приведенному aioobe.

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

Каркас может быть определен как набор библиотек, которые говорят: "Не звоните нам, мы позвоним вам".

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

Простое объяснение таково: фреймворк - это платформа, на которой вы можете создавать приложения.

Фреймворк обычно предоставляет некоторую базовую функциональность, которую вы можете использовать и расширять для создания более сложных приложений. Существуют фреймворки для самых разных вещей. Microsoft MVC Framework является хорошим примером этого. Он предоставляет все необходимое для создания веб-сайта с использованием шаблона MVC, обрабатывает веб-запросы, маршруты и тому подобное. Все, что вам нужно сделать, это реализовать "Контроллеры" и предоставить "Представления", которые являются двумя конструкциями, определенными средой MVC. Среда MVC затем обрабатывает вызовы ваших контроллеров и отображение ваших представлений.

Возможно, не самая лучшая формулировка, но я надеюсь, что это поможет

На самом низком уровне фреймворк - это среда, в которой вам предоставляется набор инструментов для работы с

это инструменты в виде библиотек, файлов конфигурации и т. д.

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

Людям на самом деле не нужны фреймворки, это просто вопрос экономии времени, а другим - просто личные предпочтения.

Люди оправдают это с помощью фреймворка, вам не нужно кодировать с нуля. Но это просто люди, которые путают библиотеки с фреймворками.

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

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

Структура обеспечивает функциональные возможности / решение конкретной проблемной области.
Определение из вики:

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

Фреймворк имеет некоторые функции, которые могут вам понадобиться. возможно, вам нужны какие-то массивы со встроенными механизмами сортировки. Или, может быть, вам нужно окно, где вы хотите разместить некоторые элементы управления, все, что вы можете найти в рамках. это такая РАБОТА, которая охватывает РАМКУ вокруг вашей собственной работы.

РЕДАКТИРОВАТЬ: ОК, я собираюсь выкопать то, что вы, ребята, пытались сказать мне;) вы, возможно, не заметили информацию между строк "РАБОТА, которая охватывает РАМКУ...", прежде чем это становится глубже и глубже. Я пытаюсь дать слово, надеясь, что вы любезны
хорошее объяснение вопроса "Разница между библиотекой и структурой" я нашел здесь
http://ifacethoughts.net/2007/06/04/difference-between-a-library-and-a-framework/

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

Я думаю, что у меня появился проблеск понимания, когда я начал сортировать список в.Net; пример структуры, предоставляющей функциональность, адаптированную к пользовательскому коду, обеспечивающему определенную функциональность. Взять List.Sort(IComparer). Алгоритм сортировки, который находится в.Net-инфраструктуре в методе Sort, должен выполнить серию сравнений; объект A идет до или после объекта B? Но сама Сортировка понятия не имеет, как сделать сравнение; это знает только сортируемый тип. Вы не могли бы написать алгоритм сортировки сравнения, который может быть повторно использован многими пользователями, и предвидеть все различные типы, которые вам понадобятся для сортировки. Вы должны оставить эту часть работы самому пользователю. Так что здесь sort, иначе, как фреймворк, вызывает метод в пользовательском коде, сортируя тип, чтобы он мог выполнить сравнение. (Или делегат может быть использован; тот же момент.)

Я правильно понял?

Фреймворк помогает нам использовать "уже созданный", метафора может быть такой,

думаю, что земля материал является языком программирования,

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

Другие вопросы по тегам