Здравствуйте, VladD2, Вы писали:
VD>Кто-нибудь может дать внятное определение термину Framework?
VD>Википедевое не предлагать. Оно не внятное.
Всякие определения хромают. Будет хромать и любое определение фреймворка.
Набор публичных библиотек .. от MozgC — а фортрановский SSP сюда пойдет ? Он ведь тоже образует большую систему и призван чего-то там облегчить...
Набор связанных библиотек от lomeo. А если библиотека одна и ни с чем не связана ? MFC, Qt. Да и что значит связанных ? А если к нему есть что-то от 3dparty ? Они связаны или нет ?
И т.д.
Я могу лишь одно определение дать. Я не знаю, что такое фреймворк. Но когда я увижу некий фреймворк, то я сразу пойму, что это он
Здравствуйте, dorofeevilya, Вы писали:
D>Nunit предоставляет собой шаблон программы, которая умеет запускать набор тестов и выводить результаты.
О как? И где же там шаблон то?
Библиотеку вижу. Утилиты для запуска тестов вижу. Шаблон — не вижу!
D>Ты пишешь тесты, помечая классы и методы соотв. атрибутами ("вставляешь код в определенные места"),
Ага. И никаких шаблонов при этом не использую.
И что самое важное, я совершенно не вижу мест в куда я должен подставлять свой код (как в твоем определении).
Можно хотя бы дать определение этого самого шаблона?
D>тем самым кастомизируя поведение шаблона под себя.
Какого еще шаблона? И что такое это загадочное "кастомизируя"?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, dorofeevilya, Вы писали:
D>Здравствуйте, VladD2, Вы писали:
VD>>Так где же эта грань отделяющая библиотеки или подходы от фрэймворка?
D>Framework — это некоторый шаблон программы с определенными местами, в которые необходимо вставить свой код, чтобы получить требуемое поведение.
Вопрос в том, чей код выполняет основную работу. Framework сам выполняет полезную (основную) часть работы, которая кастомизируется клиентским кодом. Напр., ASP.NET обрабатывает http-запросы, вызывая ваш кастомный код для выполнения конкретной работы. Библиотека же предоставляет некоторую законченную функциональность, которая может быть использована для реализации основной задачи.
Здравствуйте, dorofeevilya, Вы писали:
D>Как можно утверждать о верности того или другого определения, если сам не знаешь верного?
Ну, утверждать что что-то не врено не зная верного решения очень даже можно. Скажем я не знаю точное значение числа Пи с точностю до 20 знаков, но точно знаю, что число 20 не является числом Пи.
D>Не понял, кто такие "все другие данные рядом"?
Рядом дан ряд определение которые я в общем-то понимаю и разделяю. К ним есть только одна претензия. Они очень расплывчаты. Определение про шаблон с дырками для бубликов местами, в которые необходимо вставить свой код — это определение какого-то текстового шаблона для генерации кода или Визарад в IDE создающего заглушки код (например, новую форму). Но это никак не соответствует тому что обычно называют фрэймворками (тому же NUnit-у).
D>Если найду источник, отпишусь.
Буду очень признателен!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
VD>О как? И где же там шаблон то?
VD>Библиотеку вижу. Утилиты для запуска тестов вижу. Шаблон — не вижу!
VD>Ага. И никаких шаблонов при этом не использую. VD>И что самое важное, я совершенно не вижу мест в куда я должен подставлять свой код (как в твоем определении).
VD>Можно хотя бы дать определение этого самого шаблона?
VD>Какого еще шаблона? И что такое это загадочное "кастомизируя"?
Я не понимаю, ты хочешь просто строгое определение или действительно не понимаешь, о чем я говорю?
Если первое, то я не готов его составить.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Я могу лишь одно определение дать. Я не знаю, что такое фреймворк. Но когда я увижу некий фреймворк, то я сразу пойму, что это он
PD>А если не секрет, зачем эта игра в дефиниции ?
А вот как раз от предыдущего твоего утверждения. Я в общем-то с ним согласен. Я тоже не вижу четкого определения этого термина, но привык к тому, что фрэймворком называют некую хрень вроде Hibernate или NUnit... когда это уже вроде больше чем публичная библиотека, но все же оно не является отдельным приложением.
Так вот в последнее время появилось много трактовок этого термина и использования его не по назначению. Один из примеров этого уже был приведен здесь
Работа у меня такая. Должен я разбираться в чужих писаниях.
Вот вижу я что термин "фрэймворк/каркас" используется не по назначению. Но аргументированно ответить ничего не моугу, так как понимаю, что все имеющиеся на русском определения откровенно говоря сами высосаны из пальца.
Посему хочется как-то (в дискуссии) укрепить собственное понимание этого термина. Потому, как у меня крепнет ощущение, что термин этот используется в качествен заменителя замечательного русского термина "хреноваина" ( матерном варианте).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Ага. Как в слове алкоголика встречается слова "хрень"/"хреновина". Но называется все это библиотекой. И существовал MFC еще в те времена когда модного слова "фрэймворк" еще не существовало (не употреблялось в компьютерном сленге).
Вот и хочется четких критериев. Что считать фрэймворком, а что библиотекой. Точнее даже так. Что позволяет назвать некую библиотеку фрэймворком.
Вот скажем может ли быть фрэймворк внутри приложения? Или он обязан быть отдельной частью? Или даже обязан быть публично доступным?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Вот и хочется четких критериев. Что считать фрэймворком, а что библиотекой. Точнее даже так. Что позволяет назвать некую библиотеку фрэймворком.
Фреймворк фактически представляет из себя комплексное решение задач из какой-то области, это более абстрактная штука, нежели API. В результате с одной стороны, мы больше настраиваем фреймворк, чем работаем непосредственно с примитивами и, с другой, мы ограничены возможностями/стилем фреймворка, что накладывает определённый отпечаток на весь код.
VD>Вот скажем может ли быть фрэймворк внутри приложения? Или он обязан быть отдельной частью? Или даже обязан быть публично доступным?
Может. Ничего не мешает переизобрести hibernate/логгер/постшарп
Здравствуйте, VladD2, Вы писали:
VD>Вот вижу я что термин "фрэймворк/каркас" используется не по назначению. Но аргументированно ответить ничего не моугу, так как понимаю, что все имеющиеся на русском определения откровенно говоря сами высосаны из пальца.
Я бы вот что еще добавил. Не как определение, а просто как размышления.
Фрймворк отличается от просто библиотеки тем, что он горазо жестче предписывает правила написания программ с его применением. Я могу из фортрановского SSP взять линейную алгебру, проигнорировать полностью дифуры и прикрутить эту линейную алгебру к приложению, структуру которого я разработаю сам, вовсе не думая при этом об SSP. То же верно , скажем, для STL. Но если перейти во фреймворк, скажем, WinForms или WPF или MFC, то тут надо с начала принять его правила игры. Можно, конечно, сделать консольное приложение с .net или MFC, но это значит сразу отказаться от 90% возможностей фреймворка. А не отказываться — изволь приложение писать по этим правилам, которые он продиктует, а потом уже можно к нему и что-то иное прикрутить. И это не обязательно о визуальных фреймворках речь идет. Тот же Хибернейт продиктует правила работы с БД не менее жестко.
В общем, вот такое наклевывается определение. Если этот пакет можно безболезненно удалить и чем-то заменить, и при этом концепции не пострадают — это библиотека. Иначе — фреймворк.
VD>Вот и хочется четких критериев. Что считать фрэймворком, а что библиотекой. Точнее даже так. Что позволяет назвать некую библиотеку фрэймворком.
для абстрактных понятий не бывает четких критериев (вот введи, например, четкие критерии при каком соотношении смесь спирт-вода: называется спиртом, водкой, водой. а здесь хотя бы есть четкий способ измерить соотношение)
у абстрактного понятия "фреймворк" есть два противопоставления:
1. фреймворк vs библиотека
2. framework vs законченное приложение
способ измерения для первого противопоставления тебе уже дали: если ближе к каркасу — то framework, если ближе к нашлепке сбоку — то библиотека.
и тот же mfc, asp.net можно рассматривать и как framework, и как библиотеку (в зависимости от контекста)
.net — сложно рассматривать как библиотеку (в очень редких контекстах — это будет библиотека)
stl — тяжело рассматривать как framework (в очень редких контекстах — это будет framework)
способ измерения для второго противопоставления: если шнягу настраивать для конечного использования надо мало — готовое приложение, если много — то framework
Здравствуйте, dorofeevilya, Вы писали:
D>Здравствуйте, VladD2, Вы писали:
VD>>Так где же эта грань отделяющая библиотеки или подходы от фрэймворка?
D>Framework — это некоторый шаблон программы с определенными местами, в которые необходимо вставить свой код, чтобы получить требуемое поведение.
Поддерживаю.
Проследим мысленно работу компьютера от старта до запуска программы и до ее окончания, в виде графа вызовов процедур.
Сначала работает операционная система, потом она вызывает процедуру main(int argc, char** argv){}, та вызывает еще какие-то основные процедуры программы, те вызывают библиотечные процедуры (например, ввод-вывод).
ОС->программа->библиотека
Типичная библиотека графического интерфейса, однако, находится слева от основной программы:
ОС->GUI->программа->библиотека
То есть, GUI играет роль не просто библиотеки, а продолжения операционной системы (или роль специализированной операционной системы).
Вот такие библиотеки, играющие по отношению к программе роль ОС, называют фреймворками, чтобы отличить от обычных библиотек.
Можно сделать вывод, что обычная ОС — это тоже фреймворк.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>В общем, вот такое наклевывается определение. Если этот пакет можно безболезненно удалить и чем-то заменить, и при этом концепции не пострадают — это библиотека. Иначе — фреймворк.
Это уже ближе к делу.
PD>Но и это определение хромает.
Во-вот. Получается, что если использование библиотеки приводит к дикому связыванию кода, так что оторвать код от фрэймворка уже нельзя, то это был фрэймворк. А если код получается относительно независимым, то — это библиотека. Только тогда уж я бы предпочел библиотеку.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Кто-нибудь может дать внятное определение термину Framework?
Фреймворк это библиотека которая навязывает приложению архитектуру.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, VladD2, Вы писали:
VD>Кто-нибудь может дать внятное определение термину Framework?
Толпа окружала хреновину, на которой мы стояли. Я так толком и не узнал, что такое хреновина, когда Ааз употреблял в разговоре это слово. Однако когда я очутился здесь, я узнал её с первого взгляда. Штука, на которой мы стояли, могла быть только хреновиной.
(с) Асприн Р.Л.
На этот счет есть хорошая статья, в которой, в частности дается следующее определение фреймворку:
A framework can be defined as a set of libraries that say “Don’t call us, we’ll call you.” When you invoke a traditional library, you are still in control: you make the library calls that you want to make, and deal with the consequences. A framework inverts the flow of control: you hand over to it, and wait for it to invoke the various callback functions that you provide. You put your program’s life in its hands. That has consequences: one of the most important ones is that, while your program can use as many libraries as it likes, it can only use—or, rather, be used by—one framework. Frameworks are jealous. They don’t share.
и оно похоже на правду, вот почему: фреймворки бывают не только программерские. Есть еще вот такие: http://www.metasploit.com/framework/download/ или даже вот такие: http://www.microsoft.com/rus/business/Articles/SolutionsInfrastructureMof.mspx — в которых нет ни намека на разработку. Но единственное, что их объединяет, это именно этот самый IoC, выражающийся в метасплоите — в реализации ряда интерфейсов при разработке эксплоитов и нагрузок, и в MoF (методологии управления ИТ-инфраструктурой) — в реализации диктуемых фреймворком наборов входов и выходов всех квадрантов процесса, т.е. контрактов, т.е. тех же самых интерфейсов, но примененных не к предметной области разработки, а к предметной области управления специфичными процессами.
VD>Во-вот. Получается, что если использование библиотеки приводит к дикому связыванию кода, так что оторвать код от фрэймворка уже нельзя, то это был фрэймворк. А если код получается относительно независимым, то — это библиотека. Только тогда уж я бы предпочел библиотеку.
Здравствуйте, WolfHound, Вы писали:
VD>>Кто-нибудь может дать внятное определение термину Framework? WH>Фреймворк это библиотека которая навязывает приложению архитектуру.
Ага, это определение каркаса, кажется, дали GoF. Они рассматривали различие т.н. инструментальных библиотек и каркасов. Здесь краткий пересказ: http://www.rsdn.ru/article/patterns/generic-mvc.xml#EGOAC
Интересно следующее в этом отношении: почему в таком случае .NET Framework, а не .NET Platform?
Вот, к примеру, ASP.NET MVC Framework — правильно, так как данный каркас диктует архитектуру приложения и вызывает пользовательский код из своего кода. А .NET Framework — неправильно, так как код BCL вызывается из пользовательского кода, а не наоборот. К примеру, Sun правильно назвала Java Platform, а не Java Framework. А Microsoft как-то злоупотребляет словом Framework. Хорошо хоть Windows Platform SDK, а не Windows Framework SDK.