Чи можна вільно з'єднати додаток із його рамками?


14

Скажімо, я розробляю веб-додаток. Мій перший вибір - використовувати PHP з Fat-Free Framework (F3) та MVC. У наступному році я можу вирішити, що хочу перейти на Zend Framework або, можливо, навіть ASP.NET MVC. Чи має сенс спробувати і розробити мою програму таким чином, щоб вона була слабко пов'язана з її рамкою, або рамка занадто цілісна, щоб зробити це реалістичним?

Єдина причина, про яку я прошу, - це те, що він нещодавно з'явився в розмові з однолітком, який розкритикував мою пиріг у небі, щоб вільно з'єднати мою програму з F3.


2
Абстрагуйте подалі свої власні концепції застосування .
Vaughan Hilts

@VaughanHilts люди, здається, згодні з вами, але я не впевнений, що ви маєте на увазі. Чи можете ви докладно?
Big McLargeHuge

Відповіді:


29

Вільно пов'язане додаток з його рамкою по суті означає, що ви збираєтеся написати рамку проксі. Написання цього проксі-сервера - це велика робота, і якщо ви коли-небудь переходите на новий фреймворк, вам доведеться зробити багато роботи, щоб проксі-сервер підтримував новий фреймворк. Звичайно, різні рамки використовують різні ідіоми та шаблони, що зробить проксі-сервер або дуже складним (якщо ви спробуєте зробити його підходящим до всього), або дуже обмеженим (якщо ви хочете за найнижчим загальним знаменником). У будь-якому випадку вам доведеться боротися з цим проксі-сервером.

Чи є можливість змінити рамки на примху, вартий усієї цієї неприємності? Як я вже говорив, ви не зможете змінити його на примху, тому що вам доведеться скорегувати проксі-сервер, що може виявитися більше справою, ніж безпосередньо коригування коду програми.


4
Ваше вживання терміна "проксі-фреймворк" допомогло з'ясувати проблему для мене.
Big McLargeHuge

1
+1 до цієї відповіді. Багато разів перекодування проти нового фреймворку може бути набагато дешевшим, ніж створення проксі-фрейму - що також є спекулятивним. Зважаючи на це, я думаю, що все, що перемикається на рамки, безумовно, можливо і має сенс для рамок, де у вас є 1) кілька точок дотику до API та 2) спільність серед API різних фреймворків - але я заперечу, що це точно не звичайний випадок.
J Trana

5

Нічого не може зробити.

Ви можете проектувати таким чином, щоб він був портативний у рамках. MVC - це MVC, і принципи приблизно однакові незалежно від мови та платформи.

Фактичний код, однак, буде дуже рамовим або залежним від мови. Єдиним способом абстрагуватися від цього було б кодування на основі проміжних рамок. Тоді ви можете мати проміжну зміну реалізації (з F3 на .NET?), Не змінюючи додаток. Це багато роботи, передбачає непропускні абстракції і просто переміщує проблему, не вирішуючи її: тепер ви прив’язані до свого проміжного плану.

З позитивнішої уваги: ​​розгляньте можливість вираження деяких своїх тестів (BDD стиль) на платформі, незалежної від вашої реалізації. Вони можуть пережити великі переписувачі.


Перехід від PHP до .NET, мабуть, нереальний, як ви вказали. Я думаю на дуже високому рівні, абстрактно, можливо, зрозуміло.
Big McLargeHuge

5

Я одного разу бачив, як Роберт К. Мартін розмовляв, де він щось говорив у відповідь "перше рішення, яке ти приймаєш, - найскладніше прийняти згодом".

Тому моя порада - спробувати відкласти це рішення, якщо ви ще не зовсім впевнені, що хочете використовувати. Визначте фрагменти, які ви можете визначити зараз, і які легко залишатимуться незалежними від будь-яких рамок, які ви в кінцевому рахунку використовуєте.


Це дійсно гарна порада!
Big McLargeHuge

5

Блокування за рамками може бути серйозною проблемою, але це допомагає розглядати проблему як одну з мобільності. Переносимість не є абсолютним атрибутом, але відносно вашого початкового пункту і куди, можливо, ви хочете піти. За аналогією, тоді програмне забезпечення є портативним лише в тій мірі, в якій ви вже перенесли його в інші середовища.

Більшу частину розробки програми всередині рамки має тенденція бути клейовим кодом, що поєднує компоненти вашої рамки разом. Файли конфігурації можуть абстрагувати певну кількість клею в деяких системах, але багато тонких деталей потрібно робити в коді.

З іншого боку, ділові правила та процеси можна абстрагувати від програми. Важка частина абстракції - це коли правила реалізуються безпосередньо рамками; безпека, доступність та послідовність процесів, як правило, забезпечуються вашими рамками, і це може бути найскладніше.

Якщо ви зможете відокремити клейову частину вашої програми від ділових правил та бізнес-процесів та частини бізнес-даних, ви зможете зробити деякі частини вашого рішення переносними.


+1. Витягуючи свою бізнес-логіку в (веб-сервісі), ви можете дозволити будь-якій програмі споживати її, зводячи додаток PHP MVC до простого веб-інтерфейсу до вашої бізнес-логіки, полегшуючи її заміну в цілому.
CodeCaster

Розробка веб-сервісу схожа на розробку власного фреймворку. Також значна кількість ваших правил бізнесу, особливо частина інформаційної інженерії, повинна бути втілена в графічному інтерфейсі.
BobDalgleish
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.