Używanie pakietów (klejnotów, jajek itp.) Do tworzenia oddzielnych architektur

10

Główny problem

Widząc dobre wsparcie większość nowoczesnych platform programowania ma do zarządzania pakietami (myślę gem, npm, pipitp), to ma sens, aby zaprojektować aplikację lub system składający się z wewnętrznie opracowanych pakietów, tak aby promować i tworzyć luźno architekturę?

Przykład

Przykładem może być tworzenie pakietów dostępu do bazy danych, a także do uwierzytelniania i innych komponentów systemu. Te oczywiście używają również zewnętrznych pakietów. Następnie system importuje i używa tych pakietów - zamiast włączać ich kod do własnej bazy kodu.

Uwagi

Wydaje mi się, że sprzyjałoby to oddzieleniu kodu i pomogłoby w utrzymaniu, niemal w sposób oparty na sieci Web vs.

Czy to wydaje się racjonalną i rozsądną koncepcją projektową? Czy jest to obecnie używane jako standardowy sposób strukturyzacji aplikacji?

Juan Carlos Coto
źródło

Odpowiedzi:

12

Dwukrotnie brałem udział w takich projektach (oba używam nuget z .NET) i powiedziałbym, że w sumie to dobry pomysł. Ale twój przebieg może się różnić.

Nie myśl przez chwilę, że to panaceum, że rozwiąże wszystkie twoje problemy bez powodowania nowych. Zarządzanie Release zyska zupełnie nową warstwę złożoności, musisz radzić sobie z problemami wersja zależność nigdy nie wiedział istniał, a ty będziesz mieć czas, kiedy przeklinam decyzję, ponieważ masz do uaktualnienia cztery różne pakiety powodu mały błąd, który musisz szybko naprawić i zwolnić.

Z drugiej strony masz rację, że ładnie oddziela rzeczy. O ile nie przesadzisz, prawdopodobnie znajdziesz więcej okazji, kiedy pomyślisz „och, to się udało”, niż „to było bardzo trudne”. Jeśli masz kod współdzielony przez wiele aplikacji, jest to szczególnie skuteczne, ponieważ możesz łatwo aktualizować aplikacje niezależnie.

A jeśli jesteś podobny do mnie, szybko zaczniesz pisać aplikacje testowe, które używają twoich pakietów, aby usunąć całe warstwy aplikacji z procesu wyszukiwania błędów. A to samo w sobie może być więcej niż warte kosztów.

pdr
źródło
Cudowny wkład. Ogólnie rzecz biorąc, wszystkie rzeczy powinny być zrównoważone i podoba mi się sposób, w jaki komentarz pozostaje na tych liniach. Wspaniale jest słyszeć, że uważasz, że zazwyczaj działa dobrze w większej liczbie przypadków niż nie ... a pojawienie się problemów jest stałe. Podoba mi się twoja wskazówka na temat testowania aplikacji :). +1.
Juan Carlos Coto
1
Dodam, że jest wiele projektów, które robią to również w świecie * nix. Często biblioteki są oddzielone od interfejsów użytkownika od GUI od zasobów programistycznych itp.
David Cowden
Ciekawy. Brzmi to jak dobry sposób na zorganizowanie złożonego systemu, ale bałem się, że to przypadek nadmiernej inżynierii. Wygląda na to, że jeśli zastosuje się go ostrożnie, nie powinno tak być. Dzięki!
Juan Carlos Coto
3

W sumie to dobry pomysł. Musisz pomyśleć o utworzeniu wewnętrznego repozytorium pakietów (zwykle zwanego „repozytorium artefaktów” w świecie Java lub „serwerem pypi” w świecie Python), aby zachować tam te pakiety, których nie chcesz lub nie możesz ” Wydanie jako open source.

Jak zauważył @pdr, przygotuj się na piekło zależności , w którym zmiana w jednym pakiecie wymaga najpierw kolejnej zmiany w innym pakiecie, a to oznacza nie tylko zmianę linii kodu, ale także przetestowanie go, być może zaakceptowanie zmian, budowanie wydania i przesyłanie wydania do wspomnianego repozytorium pakietów. A potem zmieniając to, co zamierzałeś zmienić.

Jedyny przepis, jaki mogę ci dać z mojego doświadczenia, aby spróbować to zminimalizować: nie polegaj wyłącznie na wyodrębnianiu wspólnych koncepcji z twoich pakietów w pakiecie „wspólnym” lub „frameworku” . Może się to wydawać bardzo obiektywną rzeczą, ale doprowadzi do stworzenia pakietu potworów, który wymaga częstych, być może sprzecznych zmian i wydań. O wiele lepiej, pomyśl o funkcjonalnościach twojego systemu i stwórz pakiet pomocniczy dla każdego z nich, jak opisano w swoim pytaniu.

Oprócz tego, główną korzyścią, jaką otrzymasz, jest to, że twoje aplikacje są izolowane od (wielu) zależności, więc możesz je wymieniać bez bólu.

logc
źródło
Doskonała wskazówka. Nie rozważałem commonpakietu jako opcji, ale, jak pan powiedział, widziałem, że stanie się to „rozsądną” decyzją w przyszłości. Moim zamiarem było skupienie się bardziej na liniach komponentów niż na kodzie - idealnie więc nie powinieneś mieć zbyt wielu fragmentów kodu, które robią to samo w różnych pakietach, ponieważ są przeznaczone do robienia różnych rzeczy. Domyślam się, że jeśli występują podobieństwa między pakietami, tego rodzaju powtarzanie nie naruszałoby dobrych zasad programowania, ponieważ projekty są z definicji odrębne.
Juan Carlos Coto