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


30

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

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

Спасибі!

Ось висновок статті, яку я знайшов в Інтернеті деякий час тому. Просто хочу поділитися

http://www.skitoy.com/p/front-end-vs-back-end-developers-my-take/157

Професійні та бек-енд розробники (мій прийом)

Моя особиста позиція

Знову ж таки, це питання тренінгу, декількох узагальнень із загальним інсультом:

Передні розробники

  • Зазвичай не мають ступеня CS або мають ступінь CS у школі третього рівня.
  • Робота мовами, схожими на основні (див. PHP - базовий)
  • Майте візуальну майстерність у перетворенні документів Photoshop в CSS / HTML / тощо.
  • Мають високу толерантність до ітеративного програмування, завдяки вільним мовам

Задній розробник

  • Майте ступінь CS або багато досвіду
  • Схильні мені більш систематично в підході до вирішення проблем
  • Не проти витрачати дні на пошук одного предмета, який просочується
  • Спробуйте створити інструменти для вирішення проблем


2
smh, це причина, чому я кажу людям, що я Software Developer vs Web Developer.
pllee

10
Що стосуються цих узагальнень щодо передніх і задніх динаміків?
Ерік Реппен

Front End Dev! = Задній кінець Devs, хоча більшість часу, переходи, перебуваючи в них, продовжуються.
Абхінав Гауніял

Я думаю, що єдиною достовірною відповіддю тут буде: "Це залежить ..."
Олівер Вайлер

Відповіді:


43

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

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

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

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


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

3
Якщо вони думають, що передній край - це все, ви можете згадати Google ...
l0b0

1
Ось чому ви повинні створити макетний графічний інтерфейс, який ви показуєте клієнтові, і скажіть "Це те, що ви хочете, щоб програма робила?"
габлін

1
+1. @andsien: Якщо ви вже отримали свою думку, чому ви запитали? На мій досвід, Павло має рацію, стратегічний розвиток майже завжди є кращою стратегією.
Док Браун

3
@andsien: "Простіше створити передню частину, якщо у вас добре структурований задній кінець". ІМХО - це небезпечне непорозуміння. Проблема полягає в тому, що ви не знаєте, чи ваш задній кінець добре структурований, поки ви не використали його для побудови функцій для переднього фронту.
sleske

9

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

Один погляд - це статична структура даних. На цьому погляді є щонайменше три виміри: архітектурні шари («спереду назад»), випадки використання та дійові особи, а також витрати або ризики реалізації.

Один погляд - це динамічна структура обробки. На цей погляд також є принаймні три виміри.

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

Я міг би продовжувати, але справа в цьому.

Професійні та бек-енд розробники (мій прийом)

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

  • Використовуйте випадки та дійових осіб

  • Логічна модель даних для підтримки тих випадків використання

  • Процес, який виконується як частина випадку використання

  • Компоненти, які ви будете використовувати для створення цих логічних та обробних елементів випадку використання.

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

Не роби широких узагальнень щодо людей, які будуть робити розвиток.


7

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

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

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

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

Крім того, порівнювати динаміки на передньому кінці із задніми розробниками у 2008 році - це дуже давно в веб-роки. Заради забави, я хотів би виправити / додати кілька речей до цього старого каштана, оскільки ми пов’язали це у питанні, але також (сподіваємось) вкладіть декілька порад у межах:

Передні розробники

Зазвичай не мають ступеня CS або мають ступінь CS у школі третього рівня.

Показ рук. Скільки людей із ступенями КС навчали найкращих практик на передній частині? Або як не заплутати JavaScript? Або як вирішити проблеми з CSS від IE6-IE9? Індустрія підручників, яка керує науковими колами, занадто товста і ледача, щоб впоратися з технологіями, що постійно змінюються, тому вона отримує дуже мало «серйозної» уваги в коледжах. Це було чудово для пізньоквітучих, як я.

Робота мовами, схожими на основні (див. PHP - базовий)

Тому що PHP - це технологія на базі клієнта? Або тому, що JavaScript, натхненний головним чином схемою, має більше спільного з Basic, а не Visual Basic, який тепер вже не є актуальним на передньому кінці і ніколи насправді не був, але все ще доступний для веб-додатків .NET. У блозі порівнюються веб-розробники з відкритим кодом з відкритим кодом з веб-розробниками CS grad, використовуючи популярний корпоратив на даний момент. Я зіткнувся з невблаганним і компетентним в рівних частках в обидві сторони цього конкретного бою, але він все ще є ОСТ там.

Майте візуальну майстерність у перетворенні документів Photoshop в CSS / HTML / тощо.

Більше уваги до деталей, ніж "візуальна майстерність", яка трохи широка. Не всі з нас мають будь-які естетичні навички дизайну. Але так, більшість з нас повинні вивчити цей матеріал на рівні молодшого, і це насправді дуже важливо для написання хорошого інтерфейсу, який не використовує молотки JS, коли це робитимуть скальпелі CSS.

Мають високу толерантність до ітеративного програмування, завдяки вільним мовам

Ось чому ви хочете, щоб твори, про які я згадував раніше, хотіли в першу чергу. Ми передаємо натиснуті кнопки, ви виробляєте / отримуєте товар. Ми пакуємо і доставляємо їх. Немає жодних причин, щоб ці речі будь-яким чином були щільно пов'язані один з одним. Крім того, суворий набір тексту не повинен перешкоджати ітераційному процесу, якщо ви не смоктали на OOP, як правило, як правило, більшість людей, які люблять поспішати з мовою, яка технічно не має уроків. Але навіть якщо вони смердять, передній кінець потребує лише передбачуваної точки доступу, і ви можете робити все, що завгодно, на задньому кінці, доки ви не зробите щось дурне, як динамічно писати JavaScript, який не JSON або щільно прив’язуйте успішне поведінку заднього кінця до структури HTML, будучи "просто так". * кашель * java devs * / кашель *


Я тільки шкодую, що не можу поставити +1 вашому питанню більше одного разу. Прикро, що мені довелося прокрутити вниз 2 відповіді на це запитання, щоб нарешті знайти той, де зазначено, що запитувати про порядок, в якому спереду і ззаду слід розвивати, - це неправильне запитання. Я також згоден з вашою думкою про ступінь CS. І остаточне зауваження "пізнього цвітіння".
Дракон Шиван

5

На це немає єдиної правильної відповіді. Будь-який підхід може бути добрим (і поганим) у певних ситуаціях.

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

Почніть зі складання кістяка системи: основна інфраструктура з абсолютним мінімальним функціоналом. Це лише для того, щоб показати, що ваша концепція працює і різні компоненти здатні працювати разом. Сюди також відноситься інтерфейс з голими кістками (якщо це можливо), достатньо, щоб насправді зробити та / або показати щось мінімальне.

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

Для цього підходу рекомендується прочитати « Зростаюче об’єктно-орієнтоване програмне забезпечення», керуючись тестами .


1

Спочатку API

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

Поєднайтеся з ітеративним підходом і має виглядати так:

  1. Розробіть простий API
  2. Обидві команди розробляють і тестують на основі API
  3. Інтеграційний тест
  4. Покажіть клієнтові та отримайте відгуки.
  5. Удосконаліть API та повторіть.

0

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

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

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

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

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


1
Проблема, починаючи з переднього кінця (на основі досвіду), полягає в тому, що, коли ви забудете деякі функції, він може зіпсувати ваш задній кінець і може закінчитися кружляти навколо спроб виправити це
drexsien

1
@andsien - ти говориш про проектування чи будівництво? Я б не почав будувати передню частину, не спершу спроектувавши бекенд.
JeffO

ops моя провина я думаю про будівництво ... спасибі за цей Джефф.
drexsien

0

Так, я зрозумів, що ОП запитала назад. Почніть з заднього кінця, але ПІДГОТОВИТЕ передню частину, щоб користувач міг бачити, що ви плануєте Передній кінець, на все це варто, - це лише дзвіночки. Задній кінець - це гроші, і як тільки ви матимете це прямо, ЗП - це лише підлива над м'ясом.


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

@ErikReppen У мене був такий досвід багато разів - я хотів показати клієнту "користувач буде вводити дані в текстове поле", і клієнт бачить "поле форми буде шириною рівно 400 пікселів, а сторінка матиме блідо-синій фон з текстом Arial 11pt ... "Але я все ж думаю, що це краще, ніж ніколи не демонструвати передню частину. В іншому випадку можливо побудувати цілу систему, яка суперечить деяким нестандартним припущенням в основному випадку їх використання.
октерн

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

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

0

Розширення на мій коментар:

Спочатку зібрати вимоги, а потім перетворити їх у Use Cases & design.

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

Як можна починати з FE, без BE? FE для чого ??? Визначте свою базу даних !! Саме цим ІП маніпулює.

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

Однак я 1) підкреслюю, що це лише груба макет, для дискусійних свиней, і 2) навмисно роблять це некрасивим, але функціональним , так що ті, хто не розуміє, зможуть нітрити і сказати мені зробити це поле для введення рівно 400 пікс. широкий і фон світло-блакитний.

Я вважаю, що більшість відповідей тут (і я дотримувався їх), як правило, надто зосереджуються на замовниках, але, з чисто s / w точки зору, я стверджую, що ви не можете створити ЗП, щоб маніпулювати BE без першого проектування, що БЕ.


"ви не можете спроектувати ЗП, щоб маніпулювати BE, попередньо не спроектувавши BE". О так, ви можете - це називається "прототип". Це може бути цінним першим кроком при запуску нової системи.
sleske

що це за прототипування? Жодної вогняної війни, це просто спливало мені в голову. Я розумію, що таке прототип, але, можливо, тому, що я прийшов з іншої галузі, я завжди завжди бачу це як: отримайте вимоги, перетворіть їх у випадки використання та дизайн. Якщо у вас не буде прибитий d / b, тоді ви зробите непотрібну непотрібну переробку, тому спочатку впорядкуйте це, а потім з’ясуйте, як ними маніпулювати (відповідно до вимог). YMMV ... продовження ...
Mawg

Це, мабуть, не чорно-біле, інакше питання не було б задане, але будьте першим, завжди, ІМО. Насправді я зараз так роблю для клієнтів, у яких замість вимог є лише розпливчасте нечітке відчуття (я ніколи не повинен був би їх торкатися, але це вже ціла історія :-)
Mawg

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

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