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.
design-patterns
object-oriented
frameworks
Big McLargeHuge
źródło
źródło
Odpowiedzi:
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.
źródło
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.
źródło
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.
źródło
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.
źródło