Jaka jest różnica między frameworkiem a biblioteką ?
Zawsze myślałem o bibliotece jako zestawie obiektów i funkcji, które koncentrują się na rozwiązaniu określonego problemu lub określonego obszaru rozwoju aplikacji (tj. Dostępu do bazy danych); z drugiej zaś - framework jako zbiór bibliotek skoncentrowany na określonej metodologii (tj. MVC) i obejmujący wszystkie obszary rozwoju aplikacji.
Odpowiedzi:
W rzeczywistości te terminy mogą oznaczać wiele różnych rzeczy w zależności od kontekstu, w jakim są używane.
Na przykład w systemie Mac OS X frameworki to po prostu biblioteki spakowane w pakiet. W pakiecie znajdziesz rzeczywistą bibliotekę dynamiczną (libWhthing.dylib). Różnica między samą biblioteką a strukturą na komputerze Mac polega na tym, że struktura może zawierać wiele różnych wersji biblioteki. Może zawierać dodatkowe zasoby (obrazy, zlokalizowane ciągi, pliki danych XML, obiekty interfejsu użytkownika itp.). O ile framework nie zostanie udostępniony publicznie, zwykle zawiera niezbędne pliki .h potrzebne do korzystania z biblioteki.
Tak więc masz wszystko w jednym pakiecie, którego potrzebujesz do korzystania z biblioteki w swojej aplikacji (biblioteka C / C ++ / Objective-C bez plików .h jest dość bezużyteczna, chyba że napiszesz ją samodzielnie zgodnie z dokumentacją biblioteki), zamiast kilka plików do przeniesienia (pakiet Mac to tylko katalog na poziomie Unixa, ale interfejs użytkownika traktuje go jak pojedynczy plik, podobnie jak masz pliki JAR w Javie, a kiedy go klikniesz, zwykle nie widzisz co jest w środku, chyba że wyraźnie wybierzesz wyświetlanie treści).
Wikipedia nazywa framework „modnym słowem”. Definiuje strukturę oprogramowania jako
Powiedziałbym więc, że biblioteka to po prostu „biblioteka”. Jest to zbiór obiektów / funkcji / metod (w zależności od języka), a twoja aplikacja „łączy” się z nim, a zatem może korzystać z obiektów / funkcji / metod. Zasadniczo jest to plik zawierający kod wielokrotnego użytku, który zwykle może być współużytkowany przez wiele aplikacji (nie musisz ciągle pisać tego samego kodu).
Framework może być wszystkim, czego używasz do tworzenia aplikacji. Może to być biblioteka, zbiór wielu bibliotek, zbiór skryptów lub dowolne oprogramowanie potrzebne do utworzenia aplikacji. Ramy są po prostu bardzo niejasnym terminem.
Oto artykuł o jakimś facecie na temat „ Biblioteka vs. środowisko ”. Osobiście uważam, że ten artykuł jest wysoce dyskusyjny. Nie jest jednak źle, co tam mówi, po prostu wybiera jedną z wielu definicji frameworka i porównuje ją z klasyczną definicją biblioteki. Np. Mówi, że potrzebujesz ram dla podklas. Naprawdę? Mogę mieć obiekt zdefiniowany w bibliotece, mogę połączyć się z nim i podklasować go w moim kodzie. Nie rozumiem, jak potrzebuję do tego „ram”. W pewien sposób wyjaśnia raczej, w jaki sposób obecnie używa się terminu „framework”. To tylko hiperboliczne słowo, jak powiedziałem wcześniej. Niektóre firmy wydają tylko zwykłą bibliotekę (w jakimkolwiek sensie klasyczną bibliotekę) i nazywają ją „strukturą”, ponieważ brzmi to bardziej fantazyjnie.
źródło
Biblioteka wykonuje konkretne, ściśle określone operacje.
Ramy jest szkielet, w którym aplikacja określa się „mięso” operacji wypełnić szkielet. Szkielet wciąż ma kod do łączenia części, ale najważniejsza praca jest wykonywana przez aplikację.
Przykłady bibliotek: protokoły sieciowe, kompresja, manipulacja obrazem, narzędzia łańcuchowe, ocena wyrażeń regularnych, matematyka. Operacje są samodzielne.
Przykłady ram: system aplikacji WWW, menedżer wtyczek, system GUI. Ramy definiują koncepcję, ale aplikacja określa podstawową funkcjonalność, o którą dbają użytkownicy końcowi.
źródło
Myślę, że główna różnica polega na tym, że ramy są zgodne z „ zasadą Hollywood ”, tzn. „Nie dzwoń do nas, my nazywamy cię”.
Według Martina Fowlera :
źródło
Dzwonisz do biblioteki.
Framework wzywa cię.
źródło
Biblioteka:
To jest tylko zbiór z rutyny (programowanie funkcjonalne) lub definicje klas (Object Oriented Programming). Powodem jest po prostu ponowne użycie kodu , tj. Pobranie kodu, który został już napisany przez innych programistów. Klasy lub procedury zwykle definiują określone operacje w obszarze specyficznym dla domeny . Na przykład istnieją biblioteki matematyczne, które pozwalają programistom wywoływać funkcję bez ponawiania implementacji działania algorytmu.
Struktura:
W ramach całego przepływu kontroli już tam jest i istnieje kilka predefiniowanych białych plam , które powinniśmy wypełnić naszym kodem . Ramy są zwykle bardziej złożone. To definiuje szkielet gdzie aplikacja określa swoje funkcje do wypełnienia szkieletu. W ten sposób twój kod będzie wywoływany przez framework, gdy jest to odpowiednie. Korzyścią jest to, że programiści nie muszą się martwić, czy projekt jest dobry, czy nie, ale tylko o implementację funkcji specyficznych dla domeny.
Biblioteka, struktura i reprezentacja Twojego kodu:
KeyDifference:
Kluczową różnicą między biblioteką a szkieletem jest „Odwrócenie kontroli” . Kiedy wywołujesz metodę z biblioteki, masz kontrolę. Ale w przypadku frameworka kontrola jest odwrócona: frameworka wzywa cię . Źródło.
Relacja:
Oba zdefiniowały API, z którego mogą korzystać programiści. Podsumowując, możemy myśleć o bibliotece jako o pewnej funkcji aplikacji, frameworku jako szkielecie aplikacji, a API to konektor do ich łączenia. Typowy proces programowania zwykle rozpoczyna się od frameworka i wypełnia funkcje zdefiniowane w bibliotekach poprzez API.
źródło
Jak zawsze to opisywałem:
Biblioteka to narzędzie.
Ramy to sposób na życie.
Biblioteka, z której możesz korzystać, co najmniej ci pomaga. Framework, do którego musisz zobowiązać cały projekt.
źródło
Z perspektywy programisty:
Biblioteka może być łatwo zastąpiona inną biblioteką. Ale ramy nie mogą.
Jeśli nie podoba Ci się biblioteka wyboru daty jquery, możesz zastąpić ją innym wyborem, takim jak próbnik daty ładowania lub pickadate.
Jeśli nie lubisz AngularJS, na którym zbudowałeś swój produkt, nie możesz po prostu zastąpić go innymi ramami. Musisz przepisać całą bazę kodu.
Przeważnie biblioteka zajmuje znacznie mniej krzywej uczenia się w porównaniu do ram. Np .: underscore.js to biblioteka, Ember.js to framework.
źródło
Podoba mi się odpowiedź Cohena, ale bardziej techniczną definicją jest: Twój kod wywołuje bibliotekę. Framework wywołuje twój kod . Na przykład środowisko GUI wywołuje kod za pośrednictwem procedur obsługi zdarzeń. Struktura internetowa wywołuje twój kod za pomocą jakiegoś modelu żądanie-odpowiedź.
Nazywa się to również inwersją kontroli - nagle środowisko decyduje, kiedy i jak wykonać kod, a nie odwrotnie, jak w przypadku bibliotek. Oznacza to, że framework ma również znacznie większy wpływ na sposób strukturyzacji kodu.
źródło
Zapominam, gdzie widziałem tę definicję, ale myślę, że jest całkiem niezła.
Biblioteka to moduł, który wywołujesz z kodu, a framework to moduł, który wywołuje twój kod.
źródło
Framework może być wykonany z różnych bibliotek. Weźmy przykład.
Powiedzmy, że chcesz ugotować curry rybne. Następnie potrzebujesz składników, takich jak olej , przyprawy i inne narzędzia . Potrzebujesz również ryb, które są twoją bazą do przygotowania potrawy (są to dane twojej aplikacji). wszystkie składniki razem zwane ramą . Teraz użyjesz ich pojedynczo lub w połączeniu, aby ryba curry była twoim produktem końcowym . Porównaj to ze strukturą internetową wykonaną z underscore.js , bootstrap.css , bootstrap.js , fontawesome , AngularJS itp. Na przykład Twitter Bootstrap v.35.
Teraz, jeśli weźmiesz pod uwagę tylko jeden składnik, na przykład olej . Nie możesz użyć żadnego oleju, który chcesz, bo wtedy zrujnuje on twoje ryby (dane). Możesz używać tylko oliwy z oliwek . Porównaj to z underscore.js . Teraz to, jakiej marki oleju chcesz użyć, zależy od Ciebie. Niektóre dania zostały wykonane z amerykańskiej oliwy z oliwek (underscore.js) lub indyjskiej oliwy z oliwek (lodash.js). To zmieni tylko smak twojej aplikacji. Ponieważ służą one prawie do tego samego celu, ich użycie zależy od preferencji dewelopera i można je łatwo wymienić.
PS AngularJS to framework MVC, ale biblioteka JavaScript. Ponieważ uważam, że biblioteka rozszerza domyślne zachowanie natywnej technologii (w tym przypadku JavaScript).
źródło
Tak o tym myślę (i widziałem racjonalizację przez innych):
Biblioteka jest zawarta w kodzie. A framework jest kontenerem dla twojej aplikacji.
źródło
tutaj jest połączony gorzki artykuł Joela Spolsky'ego , ale zawiera dobre rozróżnienie między zestawami narzędzi, bibliotekami, frameworkami i takimi
źródło
Biblioteka implementuje funkcjonalność do wąsko zakrojonego celu, podczas gdy framework jest zwykle zbiorem bibliotek zapewniającym obsługę szerszego zakresu funkcji. Na przykład biblioteka System.Drawing.dll obsługuje funkcje rysowania, ale jest tylko jedną częścią ogólnej struktury .NET.
źródło
Biblioteka - dowolny zestaw klas lub komponentów, których można użyć, jeśli klient uzna za odpowiedni do wykonania określonego zadania.
Framework - nakłada określone wytyczne na „wtyczkę” w coś większego niż ty. Po prostu dostarczasz elementy specyficzne dla twojej aplikacji / wymagań w sposób opublikowany, aby „rama mogła ułatwić ci życie”
źródło
Biblioteki są łatwe w użyciu i wydajne. Możesz na przykład powiedzieć, że biblioteka Zend pomaga nam realizować różne zadania dzięki dobrze zdefiniowanym klasom i funkcjom. Podczas gdy framework jest czymś, co zwykle wymusza określony sposób implementacji rozwiązania, takiego jak MVC (Model -view-controller) (odniesienie) . Jest to dobrze zdefiniowany system do dystrybucji zadań takich jak w MVC. Model zawiera stronę bazy danych, Widoki dotyczą interfejsu użytkownika, a kontrolery - logikę biznesową.
źródło
Twoja interpretacja brzmi dla mnie całkiem dobrze ... Biblioteka może być wszystkim, co jest skompilowane i zawiera się w sobie w celu ponownego użycia w innym kodzie, dosłownie nie ma ograniczeń co do jego zawartości.
Z drugiej strony oczekuje się, że framework będzie posiadał szereg udogodnień do wykorzystania na niektórych konkretnych obszarach rozwoju aplikacji, tak jak twój przykład, MVC.
źródło
Myślę, że całkiem dobrze określiłeś różnicę: framework zapewnia ramę, w której wykonujemy naszą pracę ... W jakiś sposób jest bardziej „ograniczający” niż prosta biblioteka.
Szkielet ma również dodawać spójność do zestawu bibliotek.
źródło
Myślę, że biblioteka to zestaw narzędzi do osiągnięcia celu (na przykład gniazd, kryptografii itp.). Framework to biblioteka + RUNTIME EINVIRONNEMENT. Na przykład ASP.NET to framework: akceptuje żądania HTTP, tworzy obiekt strony, wywołuje zdarzenia lyfe cicle itp. Framework robi to wszystko, piszesz trochę kodu, który zostanie uruchomiony w określonym czasie cyklu życia aktualne zapytanie!
W każdym razie bardzo interesujące pytanie!
źródło
Nie pamiętam źródła tej odpowiedzi (chyba znalazłem ją w pliku .ppt w Internecie), ale odpowiedź jest dość prosta.
Biblioteka i Framework to zestaw klas, modułów i / lub kodu (w zależności od języka programowania), które mogą być używane w aplikacjach i pomagają rozwiązać szczególny „problem”.
Problemem może być rejestrowanie lub debugowanie informacji w aplikacji, rysowanie wykresów, tworzenie określonego formatu pliku (html, pdf, xls), łączenie się z bazą danych, tworzenie części aplikacji lub kompletnej aplikacji lub kodu zastosowanego do Wzorzec projektowy .
Możesz mieć Framework lub Bibliotekę, aby rozwiązać wszystkie te problemy i wiele więcej, normalnie frameworki pomagają rozwiązać bardziej złożone lub większe problemy, ale to konsekwencja ich głównej różnicy, a nie główna definicja obu.
Oznacza to, że jeśli Framework ma na przykład 50 klas, aby użyć frameworka w aplikacji, musisz użyć, powiedzmy, 10-15 lub więcej klas w kodzie, ponieważ w taki sposób zaprojektowano Framework, niektóre klasy (obiekty tych klas) są danymi wejściowymi / parametrami metod w innych klasach w ramach. Zobacz .NET Framework, Spring lub dowolny framework MVC.
Ale na przykład biblioteka dzienników, możesz po prostu użyć klasy Log w swoim kodzie i pomaga rozwiązać „problem z logowaniem”, co nie oznacza, że biblioteka logów nie zawiera więcej klas w swoim kodzie, takich jak klasy do obsługi plików, obsługi danych wyjściowych ekranu, a nawet baz danych, ale nigdy nie dotykasz / nie używasz tych klas w kodzie, i dlatego jest to biblioteka, a nie framework.
Jest też więcej kategorii niż frameworki i biblioteki, ale to nie jest temat.
źródło