我认为这个问题是错误的。
我参加的所有初创公司都没有仅限FE-BE的架构。
我知道的大多数创业公司都有:
- 核心-公开界面的实际产品
- UI-BE和FE。BE使用Core的API。
API是无状态的,易于模拟-即使不需要Core Developer。地狱,如果我必须从头开始一个项目,我可能会从一个完全可以在模拟上工作的整个UI入手-这对于演示非常有用。大多数反馈归功于UI。客户注意到更多-(取决于您的目标受众。)
例如-Google搜索的核心组件可对网络进行爬网,对其进行索引等。而Google UI则是一个完全不同的世界。此核心可以轻松支持非WWW搜索,而UI则不能。
这样,您的用户界面是“可插入的”,并且您可以将关注点分离。
您提到了开发知识,但是忽略了项目管理方面。虽然核心团队可能需要2周的冲刺时间,但UI团队将使用CI-所有内容始终都上传。核心团队将需要向后兼容,而UI则不需要。
语言有所不同。您可能需要C开发人员来使用Core组件-如果它在单个OS上运行就可以了,因为UI将使用跨OS语言编写。
测试有所不同。UI测试世界是我在软件开发中所知道的最复杂的世界之一。大多数初创公司都忽略了它,后来对此决定感到遗憾。测试时不能将BE和FE分开。它必须是处理它的单个单元。
开源用户界面-将两者分开的最大好处之一就是您可以开源用户界面。UI项目需要开源支持。
我无法想象一个不能理解整个 session
功能的UI开发人员。您知道-在不同的请求之间登录并保持登录状态。的确,他们可能知道PHP,而不是Java。.但是BE概念应该清楚(例如,使用加密的cookie)。特定的语言障碍是错误的-每个开发人员都应该愿意使用任何语言。谁会想到几年前他们会用JavaScript编写BE?
如果您继续拥有3个团队:Core,BE和FE,恕我直言,这是对资源的浪费。那DB呢?你应该有DBA吗?为什么BE开发人员知道DB而FE开发人员却不知道BE和DB?没有限制
如果您确实需要专家,则将他们外包很有效。他们通常会提供高质量的代码,而且速度很快。您不一定希望他们在公司内部,因为如果他们离开,您将会迷路。此外,您今天可以在线获得很好的建议。尖端的东西可能需要不同的方法。
因此,结果基本上是每个FE开发人员都可以开发的UI中非常薄的BE。如果用户界面中的BE较厚,则很可能在Core中需要一些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.