2013-03-05 9 views
5

Część pierwsza tłokompozytor zaproponował podejście do opakowań wewnętrznych

Nasza firma, małe starcie z zaledwie czterech programistów, jest rozpoczęcie refaktoryzacji naszych produktów do modułów wielokrotnego użytku, aby uprościć proces rozwoju, zwiększyć produktywność i wraz sposób, chcielibyśmy wprowadzić testy jednostkowe, gdzie pasuje.

Jak zwykle na małym starcie, nie możemy sobie pozwolić na marnowanie zbyt wiele czasu na rozwój, ale, jak widzimy, jest to niezwykle ważne dla sukcesu naszej firmy w średnim i długim okresie.

Obecnie mamy dwa produkty dla użytkowników końcowych. Obie są aplikacjami Laravel (PHP) zbudowanymi na bazie naszej własnej wewnętrznej warstwy biznesowej, składającej się głównie z serwisów internetowych, niespokojnych apisów i ogromnej bazy danych.

Ta warstwa biznesowa zawiera większość danych dotyczących tych produktów, ale każda z nich całkowicie się z nich korzysta. W niedalekiej przyszłości planujemy budowę innych produktów, oprócz utrzymywania i ulepszania tych dwóch, które są prawie gotowe.

W tym celu zamierzamy zlikwidować wspólną logikę tych (i przyszłych) produktów w moduły wielokrotnego użytku i oddzielone od produkcji. Oczywistym wyborem wydaje się być Composer, nawet przy naszej niewielkiej wiedzy na ten temat.

Teraz prawdziwe pytanie

Chciałbym prosić inne opinie o tym, jak rozwijać opakowań wewnętrznych na testowym napędzany mody. Czy każdy moduł powinien być pakietem kompozytora z własnymi testami jednostkowymi i wymagającymi jego zależności, czy też powinniśmy zbudować pojedynczy pakiet z każdym nazwanym modułem?

Aby trochę wyjaśnić, chcielibyśmy mieć na przykład moduł CurlWrapper, który byłby wymagany w naszym module InternalWebserviceAPI (i kilku innych).

Osobiście podoba mi się pomysł posiadania całkowicie oddzielnych pakietów dla każdego modułu i deklarowania zależności od composer.json, co mentalnie wymusiłoby oddzielenie i pozwoliłoby nam opublikować niektóre z tych pakietów jako open source pewnego dnia. Może także uprościć łamanie zmian w tych modułach, ponieważ możemy zamrozić jego wersję na zależnych, które będą wymagać aktualizacji.

Chociaż, myślę, że to oddzielenie może dodać wiele złożoności i może być trudniejsze do utrzymania i przetestowania, ponieważ każdy moduł musiałby być projektem na własną rękę i nie mamy całej tej mocy człowieka, aby utrzymać śledzenie tylu małych projektów.

Czy naprawdę kompozytor jest idealnym rozwiązaniem dla naszego problemu? Jeśli tak, to co poleciłbyś: pojedynczy pakiet lub wiele pakietów?

Edit 1:

Chciałbym podkreślić, że większość z tych modułów będą:

  • biblioteki (czyli uzyskania identyfikatora z adresu URL YouTube lub konwersji dat do " x sekund temu ")
  • Owijarki (jak chainable CURL owijki)
  • (elewacje wielu naszych serwisów internetowych, te wymagają pozostałe dwa rodzaje)
+0

Obecnie myślę o podobnym schemacie do przyjęcia dla projektu. Pytania, które mam, są takie same, więc chciałbym się dowiedzieć, jak sobie z tym poradziłeś. Idealne rozwiązanie Chciałbym wspomnieć o tym, który Wouter wspomniał poniżej, ale jak wiesz, dodaje ono do siebie warstwę złożoności, jeśli chodzi o bit integracyjny. Ale jest to solidna architektura na dłuższą metę. Mimo że kompromisem byłyby czasy deweloperów, ponieważ byłoby to trochę czasochłonne. –

Odpowiedz

2

Tak, kompozytor jest drogą i polecam korzystanie z pojedynczych paczek.

Nie wiesz, kiedy potrzebujesz tych modułów. Lepiej jest tworzyć wiele pojedynczych pakietów i być w stanie uwzględnić je wszystkie (lub jeden), niż tworzyć duże pakiety i trzeba poświęcić więcej czasu na dzielenie pakietów na wiele, gdy potrzebujesz z nich pewnych klas.

Na przykład zobacz projekt Symfony2. Jest to wiele komponentów, które są wymagane dla frameworka Symfony2 z pełnym stosunkiem, ale możesz także użyć niektórych komponentów w swoim projekcie (jak robi to Drupal8). Co więcej, Symfony2 dostaje coraz więcej pakietów, wydaje się więc przydatne mieć małe pakiety, które ludzie poświęcają czas na rozbijanie dużych pakietów.

+0

Dziękuję za odpowiedź, Wouter. Rzeczywiście, architektura Symfony i Laravel były głównymi motywatorami naszych wątpliwości, zostały zbudowane z myślą o modułowych pakietach, które działają całkiem nieźle, ale są utrzymywane przez nie tylko dedykowanych programistów, ale całą społeczność. Lub główną obawą jest to, że ta architektura może być przesadna i zużywać zbyt wiele czasu na konserwację naszego małego zespołu, który jest podzielony między te produkty i nasze usługi podstawowe, które dostarczają dane dla nich. – vFragosop

1

Alternatywa dla używania pojedynczych pakietów: użyj separate composer.json files dla każdego podprojektu.

Ma to tę zaletę, że pozwala zachować wszystkie swoje biblioteki w tym samym repozytorium. Podczas refaktoryzacji kodu można również podzielić się autoloadem i zależnościami według podfiblioteki.

Jeśli dojdziesz do punktu, w którym chcesz odłączyć bibliotekę do własnego pakietu wersji, możesz przejść do ostatniego kroku i sprawdzić go we własnym repozytorium.

+0

Ta odpowiedź wydaje się być myląca - link wskazuje na dokumentację dotyczącą dołączania konfiguracji repozytorium, a nie wielu plików composer.json. – joerx

Powiązane problemy