Я думаю, что вопрос не так.
Все стартапы, в которых я принимал участие, не имели архитектуры FE-BE only.
Большинство стартапов, которых я знаю, имеют:
- Ядро - актуальный продукт, который предоставляет интерфейс
- UI - БЫТЬ и ИП. BE использует API ядра.
API-интерфейсы не сохраняют состояния и легко подделываются - даже без необходимости в Core Developer. Черт, если бы мне пришлось начинать проект с нуля, я мог бы начать с целого пользовательского интерфейса, который работает исключительно на макетах - что будет хорошо для презентаций. Большая часть отзывов связана с пользовательским интерфейсом. Клиенты отмечают, что больше - (зависит от вашей целевой аудитории.)
Например, в Поиске Google есть основной компонент, который сканирует Интернет, индексирует его и т. Д., А пользовательский интерфейс Google - это совершенно другой мир. Это ядро может легко поддерживать поиск не в WWW, а пользовательский интерфейс - нет.
Таким образом, ваш интерфейс «подключаемый», и у вас есть разделение интересов.
Вы ссылались на Знания о разработке, однако упускаете из виду аспекты управления проектами. В то время как основной команде может понадобиться 2 недели спринта, команда пользовательского интерфейса будет использовать CI - все загружается все время. Базовая команда будет нуждаться в обратной совместимости, а пользовательский интерфейс - нет.
Язык отличается. Вам, вероятно, понадобятся разработчики C для компонента Core - и все будет в порядке, если он будет работать на одной ОС, где пользовательский интерфейс будет написан на кросс-OS.
Тесты разные. Мир тестирования пользовательского интерфейса - один из самых сложных в разработке программного обеспечения. Большинство стартапов пренебрегают этим и потом сожалеют об этом решении. Вы не можете разделить BE и FE при тестировании. Это должно быть единое целое, которое справится с этим.
Open Source UI - одно из величайших преимуществ их разделения заключается в том, что вы можете открыть свой UI с открытым исходным кодом. Проект пользовательского интерфейса нуждается в поддержке с открытым исходным кодом.
Я не могу представить разработчика UI, который не может понять всю session
функцию. Вы знаете - где вы входите и остаетесь в системе между различными запросами. Правда, они могут знать PHP, а не Java ... но концепция BE должна быть ясной (например, использовать зашифрованный cookie). Конкретный языковой барьер неправильный - каждый разработчик должен быть готов работать на любом языке. Кто бы мог подумать, что они напишут BE на JavaScript пару лет назад?
Если у вас есть 3 команды: Core, BE и FE, это пустая трата ресурсов imho. Как насчет БД? у вас должны быть администраторы баз данных? Почему разработчик BE должен знать DB, а разработчик FE не знать BE и DB? Там нет предела.
Если вам нужны эксперты, и вы будете, аутсорсинг их работает довольно хорошо. Они обычно предоставляют качественный код и делают это довольно быстро. Вы не обязательно хотите их в доме, потому что вы потеряетесь, если они уйдут. Кроме того, вы можете получить отличный совет онлайн сегодня. Передовые вещи могут потребовать другого подхода.
Таким образом, в результате получается очень тонкий BE в пользовательском интерфейсе, который может разработать каждый разработчик FE. Если у вас толстый BE в пользовательском интерфейсе, вам, скорее всего, требуются некоторые функции API, необходимые для ядра.
Всегда есть хотя бы один разработчик, который выделяется среди остальных. Учитывая такой тонкий FE, он / она может управлять предоставлением поддержки (не разрабатывать) другим разработчикам в коде BE. Мое мнение таково, что этот разработчик находится в очень хорошем положении и должен получать соответствующую награду (хотя не в зарплате, а в другом) Я также верю, что они смогут справиться с процессом сборки и построить правильно.
Эта модель дает вам большую гибкость в отношении разработки BE. В мире BE за последние пару лет было несколько изменений, поэтому я не рекомендую слишком сильно полагаться на стабильность BE. Ядро это отдельная история.
Остается вопрос: должны ли FE и BE быть одним и тем же проектом ? Вы должны отметить следующее
- Статические ресурсы лучше всего обслуживать с фронт-сервера. Поскольку серверы переднего плана (например, nginx) очень мощные, и поскольку вы можете использовать Cache для статических ресурсов, вы можете управлять одним развертыванием статических ресурсов (которое должно быть всем содержимым HTML, JS, CSS, изображениями).
- Внутренний код не имеет такой же роскоши, поэтому у вас должна быть распределенная система, которая также управляется фронт-сервером.
- Код FE можно использовать повторно со всеми новыми технологиями, поддерживающими JavaScript. Теперь вы можете писать настольные и мобильные приложения с помощью JavaScript.
- Процесс сборки совершенно другой - и даже может включать доставку исправлений, обновление, установку и т. Д.
Я могу продолжать, но я надеюсь, что ясно, что я думаю, что BE и FE должны быть одной командой, но, возможно, разными проектами.
if you have a startup, don't assign roles. Better hope that you assembled a good self organizing team. If everybody knows each other, everybody knows who does what the best.