Чи має сенс уникати фреймворку під час створення великого веб-сайту з PHP?


9

Будучи розробником веб-додатків PHP вже кілька років, я мав свою частку MVC та фреймворків. Спочатку я подумав, що це найкраще, оскільки нарізаний хліб; все здавалося дуже простим у виконанні.

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

Наприклад, в одному з моїх проектів, де я використовую Slim (C) + Idiorm (M) + Twig (V) (який, на мою думку, є дуже гнучким), я повинен створити власну функцію просто для відображення динамічних даних у батьківських шаблонах; без рамки я міг би просто виконати mysql_query () у включеному файлі.

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

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

Отже, моє запитання: чи нормально просто повернутися до основ і використовувати стандартний код PHP та бібліотеки для виконання мого наступного проекту, де може бути газильйон фреймворків та бібліотек, за умови, що я можу достатньо використовувати хороші практики кодування та слідувати розумним моделям дизайну як MVC? Моя команда розробників досить мала: всього 2 програміста та 1 дизайнер. Інший програміст погоджується з моїми думками вище.


1
"Однак, чим складнішим стає додаток, тим більше клопотів я отримую з рамками". Це просто аргументативно та суб’єктивно. Чи можете ви видалити такі скарги та перейти до власне питання? Чи можете ви навести конкретні конкретні приклади проблеми, яку ви хочете вирішити? Якщо це просто "мені не подобаються рамки", це насправді не дуже вдале питання. Можливо, ви могли б зосередитись на чомусь, де є реальна відповідь, а не обмін думками.
S.Lott

@ S.Lott: Ну, я привожу приклад у своєму питанні. А насправді я не ненавиджу рамки. Я просто хочу дізнатися думки людей про те, що в сучасні дні не використовувати рамки PHP.
Furunomoe

"Мені часто доводилося створювати власну функцію просто для відображення динамічних даних"? Це не дуже детальний приклад. Незрозуміло, чому або як не вдалося вам підбити рамки. Існує дуже віддалена ймовірність того, що ви використовували рамку неправильно.
S.Lott

Відповіді:


17

Мій досвід майже протилежний вашому. Роблячи невеликі, швидкі речі, рамки можуть трохи «заважати», оскільки вам потрібно певним чином викласти свій код і продумати речі, перш ніж продовжувати. Просто перескочивши прямо до mysql_queryвас, ваш прототип може працювати набагато швидше.

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

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


1
Звичайно, я не кидаю випадково mysql_query()туди-сюди. Я маю на увазі, що в класичному PHP я просто можу просто додати виклик до чогось подібного Categories::read_all()і провести цикл через результат у якомусь файлі header.php, тоді як у Twig я повинен створити для цього спеціальну функцію Twig. А для складання прототипів я люблю риси лісу :)
Furunomoe

1
вам не потрібна рамка, щоб ретельно викласти і продумати свій код. простіше зробити це без рамок. рамки накладають на вас посередні схеми організації коду.
Райнос

3
Рамки дійсно сяють, коли ви робите складні проекти, оскільки вони визначають набір правил та рекомендацій, яких ви повинні дотримуватися. Я поставив +1 дікові відповідь, тому що це був і мій досвід.
Бурхан Халід

7

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

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

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


Що простіше для маленького сайту, може не бути простішим для великого. А навпаки.
Горан Йович

1
@Goran Jovic, погодився.
Даніель Скокко

1
+1 для building your own. Незалежно від того, усвідомлюєте ви це чи ні, ви отримаєте численні допоміжні функції та / або класи, які можна вважати вашими власними рамками.
Ізката

5

Мій досвід роботи з "рамками" на стороні сервера був досить неприємним, наприклад:

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

Б) Катастрофічний вибух найпростішого створення об'єкта на тисячі непотрібних SQL-виконань.

C) Химерне поняття про те, що кодування 100 рядків XML якимось чином легше або надійніше, ніж кодування 2 рядків Java.

D) Необхідність написання 100-ти рядків абсолютно непотрібного сервера POJOS для відображення на об'єктах на стороні клієнта на іншій, а іноді й декількох інших мовах (C # JS тощо)

E) Не маючи поняття, що насправді сталося, коли ви отримуєте 30-рівневий глибокий слід стека, який не включає навіть рядок коду, який ви використовували для виклику фреймворку.

Будьте ренегатом, напишіть власну основу ... ви не пошкодуєте про це, поки спочатку плануєте усунути всі непотрібні речі, які інші дурять вас на думку, що вам потрібно. Тоді ви зрозумієте все це, він поставляється в Kb замість Mb, і він, ймовірно, буде "бігати куди завгодно", що було одним із основоположних принципів Java, чи не так?

Спробуйте подумати таким чином "навіщо мені це потрібно ... це просто підтримувати рамки щасливими?" .. Якщо мені це не потрібно, то що ще мені не потрібно?


4

Розробники Django провели презентацію, яку я зараз не можу знайти, але вони говорять про "долину ефективності", де рамки роблять вас більш продуктивними.

Якщо припустити, що ви не маєте знань про рамки, коли ви починаєте проект, ваша продуктивність спочатку буде дуже низькою - ви будете вивчати конвенцію рамки, а не ідіому мови (яку, сподіваємось, ви вже знаєте).

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

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

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

Таким чином, для невеликих проектів (на мій досвід, щонайменше ~ 500 годин) ваша ефективність із рамкою буде більшою, ймовірно, ніж ваша ефективність без. Як тільки ви потрапите на певний поріг (між 500 і 800 годин, IME), ви почнете розуміти, що існують обмеження щодо того, що може запропонувати рамка.

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


4

Добре розроблена рамка повинна бути допомогою програмісту, а не перешкодою. Якщо рамка, яку ви використовували, занадто сильно заважає, я б запропонував переглянути інший фреймворк. У кожного свій стиль кодування, свої плюси і мінуси.

Сказавши це, рамки Zend здаються надзвичайно популярними в наші дні, і якщо чесно? Я намагаюся зрозуміти, чому іноді. Мені доводилося працювати з ним у минулому, і мені трохи не сподобалась його архітектура. Клас Zend_Form смішно переосмислений, система його декораторів у використанні надзвичайно жахлива, і декоратори прив'язують форми до поглядів, порушуючи фундаментальну концепцію ООП, вказуючи, що об'єкти повинні бути вільно з'єднані. Він також має багато коду, реалізованого як Singletones (це погано з причин, які добре задокументовані, тому я не хочу повторити), а об'єкт Registry також сприяє заохоченню неохайного стилю кодування.

Я чув, що Zend Framework 2 (зараз у бета-версії) є набагато кращим продуктом, але поганий смак Zend 1, що залишився в роті, означає, що я не поспішаю спробувати його.

І все-таки на даний момент я просто заїжджаю. :) Тут є безліч рамок, кожен зі своїми плюсами та мінусами, я б запропонував оцінити декілька з них.


3

Те, що ви описуєте, в минулому називалося "складністю, викликаною абстракцією". Єдиний документ про його управління: Управління складнощами, викликаними абстракцією , Девідом Кеппелем. Keppel припускає, що рамки мають конструкцію, яка викликає складність, викликану абстракцією.


2

Робота з рамкою допомагає вам прискорити свій розвиток, не винаходивши колесо . Рамка також надає вам інструменти, які допоможуть вам правильно розробити додаток (але це не заважає вам приймати погані дизайнерські рішення, наприклад, отримати доступ до бази даних безпосередньо з виду).

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

Підсумок полягає в тому, що використання великої основи для простих проектів (наприклад, відображення кількох полів із бази даних) іноді може бути надмірним. Для великих або складних проектів використовуйте рамку.


1

Існує кілька сторін написання власного коду проти використання Framework:

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

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

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

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


0

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

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

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