Library vs. Frameworks – What’s the Difference?

Strona Wikipedii dla biblioteki kodu definiuje ją jako:

„W informatyce, biblioteka jest zbiorem nieulotnych zasobów używanych przez programy komputerowe, często do rozwoju oprogramowania. Mogą one obejmować dane konfiguracyjne, dokumentację, dane pomocy, szablony komunikatów, wstępnie napisany kod i podprogramy, klasy, wartości lub specyfikacje typów.”

Porównując to z definicją frameworka:

„W programowaniu komputerowym, framework oprogramowania jest abstrakcją, w której oprogramowanie zapewniające ogólną funkcjonalność może być selektywnie zmieniane przez dodatkowy kod napisany przez użytkownika, zapewniając w ten sposób oprogramowanie specyficzne dla aplikacji.

Zapewnia standardowy sposób budowania i wdrażania aplikacji i jest uniwersalnym, wielokrotnego użytku środowiskiem oprogramowania, które zapewnia określoną funkcjonalność jako część większej platformy oprogramowania w celu ułatwienia rozwoju aplikacji, produktów i rozwiązań.”

Jest tam wiele do rozpakowania, ale jeśli pracowałeś z obydwoma, prawdopodobnie możesz już zobaczyć, że ogólnie rzecz biorąc, biblioteka kodu jest używana do rozwiązania konkretnego problemu lub dodania konkretnej funkcji do twojego programu.

Z drugiej strony, framework zapewnia ci coś znacznie bardziej ogólnego i wielokrotnego użytku. Jeśli będziesz czytać dalej wpis w Wikipedii, zauważysz, że trzy rzeczy odróżniają framework od biblioteki.

Odwrócenie kontroli

Biblioteki podłączają się do twojego kodu, twój kod podłącza się do frameworka.

Pierwszą istotną różnicą pomiędzy frameworkiem a biblioteką jest to, kto sprawuje kontrolę nad procesem rozwoju.

W przypadku biblioteki kodu, programista generalnie odwołuje się do biblioteki, kiedy tylko uzna to za stosowne. Framework wymaga, aby programista był w pełni zanurzony w jego przepływie pracy.

W rezultacie, często ma się wrażenie, że to framework kontroluje proces rozwoju, a nie programista. To jest właśnie odwrócenie kontroli! W uproszczeniu wygląda to następująco:

  • Biblioteka: Zadzwoń do nas, aby wykonać zadanie.
  • Framework: You don’t call us, we’ll call you.

To właśnie z powodu tego odwrócenia kontroli, frameworki są znacznie bardziej opiniotwórcze, a także dlatego są w stanie zrobić tak wiele dla programistów.

Opinionated dla tych, którzy się zastanawiają oznacza, że frameworki podejmują wiele decyzji dotyczących sposobu pisania kodu, lokalizacji plików, a może nawet nazwy tych plików.

Making these assumptions allows for the usage of the paradigm of convention over configuration which allows developers to skip the process of app configuration in exchange for following certain conventions (such as putting certain files in certain folders, etc.).

Ruby on Rails is a popular framework for developing web applications.

Look at a framework like Ruby on Rails. It is often considered highly opinionated. Kiedy tworzysz nowy projekt w Ruby on Rails, wygeneruje on wiele folderów i plików z mnóstwem wstępnie napisanego kodu.

Większość pracy programisty będzie prawdopodobnie wykonywana w folderze app (jest to lokalizacja podfolderów modeli, widoków, kontrolerów), ale w projekcie Rails znajduje się mnóstwo innego kodu, który jest przeznaczony do uruchomienia Twojej aplikacji.

Co więcej, Ruby on Rails ma specyficzny przepływ pracy, którego oczekuje od Ciebie. Kiedy tworzysz model User w Railsach, zakłada on, że jest on powiązany z UsersController.

Rails chce, aby te pliki nazywały się w określony sposób (user.rb dla modelu i users_controller.rb dla kontrolera) i chce je mieć w swoich odpowiednich folderach.

Odbieganie od przepływu pracy Railsów pozostawi cię sfrustrowanego tym, jak i dlaczego twój kod nie działa. Work with it and everything just seems to magically work.

A large part of that magic (some do refer to it as Rails magic) is just all of that pre-written code working in the background. You fill in the models, views, controllers, and draw some routes, and Rails will take care of linking everything up correctly.

ChartJS lets you make some really beautiful charts.

Compare this to Chart.js which is a JavaScript library for creating really beautiful charts.

Ty wybierasz kiedy i gdzie wywołać Chart.js i chociaż prawdą jest, że jesteś zobowiązany do wypełnienia pól podczas tworzenia nowego wykresu (będziesz chciał określić typ wykresu, etykiety, kolory, itp.), to nie kontroluje to twojego przepływu pracy.

Chart.js dba tylko o informacje niezbędne do narysowania wykresu; nie obchodzi go reszta twojego kodu.

Extensibility

Ważnym pojęciem w programowaniu obiektowym jest zasada otwartego-zamkniętego. Zasada ta mówi, że zachowanie kodu powinno być otwarte na bycie zmienionym/rozszerzonym bez konieczności bezpośredniej zmiany kodu.

Prostym przykładem tego jest dziedziczenie w klasach, które pozwala podklasie na dodanie funkcjonalności i potrzebnych jej cech bez konieczności bezpośredniej zmiany kodu w klasie nadrzędnej.

Extensibility pozwala programiście na dodanie nowych funkcji do frameworka lub dostosowanie zachowania istniejących funkcji do swoich potrzeb bez modyfikowania kodu źródłowego.

Dobre frameworki są zbudowane z myślą o extensibility. Zapewniają one ogólną funkcjonalność potrzebną do stworzenia ogólnej aplikacji, ale pozostawiają się otwarte na specyficzne dodatki i zmiany niezbędne dla konkretnej aplikacji.

Gdyby framework nie był rozszerzalny, byłby raczej ograniczony w swojej funkcjonalności, a to uczyniłoby go znacznie mniej atrakcyjnym do nauki.

Podążając za powyższymi przykładami, istnieje kilka rozszerzeń dla frameworka Ruby on Rails, aby dodać dodatkowe funkcje, takie jak uwierzytelnianie użytkownika.

Gdyby Railsowi brakowało tych rozszerzeń, poważnie ograniczyłoby to, co można by stworzyć używając go. Aby być uczciwym, Chart.js ma również wiele wtyczek i rozszerzeń. Pozwalają one na takie rzeczy jak rysowanie dodatkowych typów wykresów.

Różnica tutaj jest znacznie mniej widoczna, jednakże, ponieważ frameworki zapewniają ogólną funkcjonalność, powinny być budowane z myślą o rozszerzalności, tak aby można było zaimplementować funkcje specyficzne dla danej aplikacji.

Biblioteka niekoniecznie musi być budowana z myślą o rozszerzalności, jej głównym celem jest wykonanie konkretnego zadania.

Niezmodyfikowalny kod

Ta koncepcja jest na szczęście dużo łatwiejsza i prostsza do wyjaśnienia. Krótką i prostą odpowiedzią jest to, że frameworki wygenerują masę kodu i w większości przypadków, nie dotyka się tego kodu.

Wracając do Railsów, jak wyjaśniono wcześniej, generalnie deweloper spędza większość swojego czasu pracując nad folderem aplikacji. Programista zazwyczaj nie będzie zmieniał ani usuwał napisanego wcześniej kodu.

Dodaj komentarz