Czy można luźno powiązać aplikację ze środowiskiem?

14

Powiedzmy, że tworzę aplikację internetową. Moim pierwszym wyborem jest użycie PHP z Fat-Free Framework (F3) i wzorem MVC. W przyszłym roku mogę zdecydować, że chcę przejść na Zend Framework, a może nawet ASP.NET MVC. Czy ma sens próba zaprojektowania mojej aplikacji w taki sposób, aby była luźno sprzężona z jej strukturą, czy też jest ona zbyt integralna, aby uczynić ją realistyczną?

Jedynym powodem, dla którego pytam, jest to, że pojawił się niedawno w rozmowie z rówieśnikiem, który skrytykował moje ciasto na niebie za luźne połączenie mojej aplikacji z F3.

Big McLargeHuge
źródło
2
Wyodrębnij własne koncepcje aplikacji .
Vaughan Hilts
@VaughanHilts ludzie wydają się zgadzać z tobą, ale nie jestem pewien, co masz na myśli. Czy możesz rozwinąć?
Big McLargeHuge
Hah: sitepoint.com/…
Big McLargeHuge

Odpowiedzi:

29

Luźne sprzężenie aplikacji z frameworkiem oznacza w zasadzie napisanie frameworka proxy. Pisanie tego frameworka proxy to dużo pracy, a jeśli kiedykolwiek przełączysz się na nowe frameworki, będziesz musiał wykonać wiele pracy, aby frameworki proxy wspierały nowy frameworek. Oczywiście różne frameworki używają różnych idiomów i wzorców, co spowoduje, że frameworki proxy będą albo bardzo złożone (jeśli spróbujesz dopasować je do wszystkiego), albo bardzo ograniczone (jeśli wybierzesz najniższy wspólny mianownik). Tak czy inaczej, będziesz musiał walczyć z tą strukturą proxy.

Czy możliwość zmiany frameworka według kaprysu jest warta całego tego problemu? Tak jak powiedziałem, nie będziesz mógł tego zmienić kaprysem, ponieważ będziesz musiał dostosować framework proxy, co może okazać się bardziej pracochłonne niż bezpośrednie dostosowanie kodu aplikacji.

Idan Arye
źródło
4
Używanie terminu „środowisko proxy” pomogło mi wyjaśnić ten problem.
Big McLargeHuge
1
+1 do tej odpowiedzi. Wiele razy przekodowywanie w nowym frameworku może być znacznie tańsze niż tworzenie frameworka proxy - co również spekuluje. Biorąc to pod uwagę, myślę, że cała zmiana przełączania ram jest zdecydowanie możliwa i ma sens w przypadku frameworków, w których masz 1) kilka punktów kontaktu z API i 2) podobieństwo między interfejsami API różnych frameworków - ale argumentowałbym, że zdecydowanie nie wspólny przypadek.
J Trana
5

Nie da się.

Możesz projektować w sposób przenośny dla różnych środowisk. MVC to MVC, a zasady są w przybliżeniu takie same, niezależnie od używanego języka lub platformy.

Rzeczywisty kod będzie jednak bardzo zależny od frameworka lub języka. Jedynym sposobem na oderwanie się od tego byłoby kodowanie w oparciu o pośredni framework. Następnie możesz wprowadzić pośrednią zmianę implementacji (z F3 na .NET?) Bez zmiany aplikacji. To dużo pracy, zakłada nieszczelne abstrakcje i po prostu przenosi problem bez jego rozwiązania: jesteś teraz przywiązany do swojej pośredniej struktury.

Z bardziej pozytywnych uwag: rozważ wyrażenie niektórych testów (styl BDD) na platformie niezależnej od implementacji. Mogą przetrwać poważne zmiany.

ptyx
źródło
Zmiana z PHP na .NET prawdopodobnie nie jest realistyczna, jak zauważyłeś. Myślę na bardzo wysokim poziomie, abstrakcyjny, być może świadomy.
Big McLargeHuge
5

Kiedyś widziałem, jak Robert C. Martin wygłosił przemówienie, w którym powiedział coś w stylu „pierwszej decyzji, którą najtrudniej jest zmienić później”.

Dlatego radzę spróbować opóźnić tę decyzję, jeśli nie jesteś jeszcze pewien, czego chcesz użyć. Zidentyfikuj elementy, które możesz teraz zdefiniować i które z łatwością pozostałyby niezależne od jakiegokolwiek frameworku, którego używasz.

M. Scott Ford
źródło
To naprawdę dobra rada!
Big McLargeHuge
5

Blokowanie struktury może być poważnym problemem, ale pomaga spojrzeć na problem jako przenośny. Przenośność nie jest absolutnym atrybutem, ale zależy od punktu początkowego i miejsca, w którym możesz chcieć iść. Analogicznie więc oprogramowanie jest przenośne tylko pod warunkiem, że zostało już przeniesione do innych środowisk.

Większość rozwoju aplikacji wewnątrz frameworka jest zwykle kodem klejącym, czyli materiałem, który łączy ze sobą komponenty frameworka. Pliki konfiguracyjne mogą wyodrębnić pewną ilość kleju w niektórych systemach, ale wiele drobnych szczegółów należy wykonać w kodzie.

Z drugiej strony reguły biznesowe i procesy można wyodrębnić z aplikacji. Trudność polega na tym, że reguły są wdrażane bezpośrednio w ramach; bezpieczeństwo, dostępność i sekwencjonowanie procesów są zwykle egzekwowane przez środowisko i mogą być najtrudniejsze do zobaczenia.

Jeśli możesz oddzielić część kleju aplikacji od reguły biznesowej oraz części procesu biznesowego i danych biznesowych, będziesz w stanie uczynić niektóre części swojego rozwiązania przenośnymi.

BobDalgleish
źródło
+1. Wyodrębniając logikę biznesową w usłudze (internetowej), możesz pozwolić dowolnej aplikacji na jej wykorzystanie, redukując aplikację PHP MVC do zwykłego internetowego interfejsu graficznego do logiki biznesowej, co ułatwia wymianę jako całości.
CodeCaster,
Projektowanie usługi internetowej przypomina projektowanie własnego frameworka. Ponadto znaczna liczba reguł biznesowych, w szczególności część inżynierii informatycznej, musi zostać zawarta w interfejsie GUI.
BobDalgleish