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

194

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

озабоченный
источник

Ответы:

422

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

Неха Чоудхари
источник
27
Я хотел бы знать причину, по которой вы проголосовали против. Это поможет мне улучшить это.
Неха Чоудхари
4
круто очень легко понять ........... спасибо большое
Premkumar
25
@NehaChoudhary, не я, а он -1, потому что вы говорите о библиотеке, а не о фреймворке, поскольку здесь нет IoC.
Pacerier
11
Я прочитал ваше сообщение, но то, что вы публикуете, звучит как то, что может сделать библиотека. Как насчет объяснения разницы между фреймворком и библиотекой?
Аарон Лю
2
Я не понимаю Из того, что вы объяснили, что будет больше похоже на библиотеку правильно?
маршрутизатор
92

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

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

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

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

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

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

Стив Джалим
источник
17
Почему бы не вкладывать эту энергию в развитие среды с открытым исходным кодом, вместо того, чтобы набирать собственные вещи? «В одиночку мы можем двигать камни; вместе мы можем сдвинуть горы »и все такое
Стив Джалим
7
@Jefffrey "Тогда как ты научишься? Как ты вырастешь как программист?" Учитесь как хотите, но если вы собираетесь работать на реального клиента, вы должны предоставить наилучшее из возможных решений в кратчайшие сроки. ВАШ "вероятно глючный" код не подходит для этого.
Cmorales
6
@Cmorales, если вы хотите изучать язык программирования или какую-либо конкретную предметную проблему, у вас наверняка не будет «реального» клиента (и у вас, возможно, будет много времени в ваших руках), и именно поэтому я предлагаю новичков не начинать с рамок.
Чистка
3
@Jefffrey Вы ничего не сказали о новичках в своем комментарии, это было общее. Я согласен, что вы должны сначала учиться самостоятельно, но в вашем комментарии это не указано, и в реальной (рабочей) жизни вы не можете позволить себе использовать глючный код просто для обучения. Я знаю парней, которые не используют фреймворки, потому что думают, что знают лучше ... и тратят вдвое больше времени на каждый проект.
Cmorales
1
@Cmorales Я также знаю некоторых людей, которые используют фреймворки, но занимают вдвое больше времени для каждого проекта. Скорость программирования не всегда связана с используемыми инструментами.
Cypher
53

Краткое описание в Википедии (Software Framework) (кстати, первое попадание в Google) объясняет это довольно хорошо:

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

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

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

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

aioobe
источник
13
белая часть вашего ответа была намного лучше, чем серая, в зависимости от типа вопроса ...
OlimilOops
Я почти уверен, что человек, задающий вопрос, тоже нашел запись в Википедии ... Он / она, вероятно, искал более полный ответ.
Stophface
31

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

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

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

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

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

ПРОСТО МОЕ правильное мнение
источник
14

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

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

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

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

дуб
источник
8

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

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

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

Sekhat
источник
1
На самом деле, это больше похоже на встраивание приложений в строительные леса, чем вокруг них.
Йорг Миттаг
4

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

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

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

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

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

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

yretuta
источник
4

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

Ума
источник
2

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

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

Со Мое
источник
В первом предложении есть слово «абстракция». Что ты имеешь в виду ? где мы используем абстракцию?
Кумаресан Перумал
2

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

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

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

stckvrflw
источник
2

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

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

OlimilOops
источник
совершенно не понимаю поданных голосов ... я совершенно ошеломлен этим. этот вопрос является своего рода базовым вопросом для начинающих, и мой ответ был в соответствии с этим довольно хорошо ...
OlimilOops
4
Чтобы было ясно: я не голосовал против. Однако то, о чем вы говорите, находится на гораздо более низком уровне, чем то, о чем заботится фреймворк. Коллекции и алгоритмы сортировки - это больше стандартные библиотеки, чем, например, Frameworks.
Баккал
1
спасибо за ответ, но ... это не ответ на мой вопрос. в соответствии с вопросом ОП, здесь не то место между "стандартной библиотекой" и "структурой". Например, в .net-framework вы можете найти коллекции пространств имен в части фреймворка. Я никогда не слышал, чтобы кто-то говорил, что коллекция пространств имен не является частью .netframework. так что ваш ответ на мой вопрос неправильный
OlimilOops
1
Это определение библиотеки . Он пропускает отличительную черту структуры в отличие от библиотеки: инверсия контроля .
Йорг Миттаг
2

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

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

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

BillB
источник