我对小型MVC应用程序的理解是,您拥有处理HTML,JS,jQuery等的前端,而拥有由控制器和模型组成的后端。
但是,当我与大公司的开发人员交谈时,他们经常提到拥有前端层和后端层。所以有时候,我可能会听说他们在C#中有一个前端,在Java中有一个后端。为什么任何公司都希望使用不同语言的后端和前端?这是否有助于大型网站更好地扩展?
当人们说他们的前端是用C#构建的时,这是否意味着他们使用的是前端框架(如.NET)和后端的其他框架(如Spring)?还是意味着完全不同?
我对小型MVC应用程序的理解是,您拥有处理HTML,JS,jQuery等的前端,而拥有由控制器和模型组成的后端。
但是,当我与大公司的开发人员交谈时,他们经常提到拥有前端层和后端层。所以有时候,我可能会听说他们在C#中有一个前端,在Java中有一个后端。为什么任何公司都希望使用不同语言的后端和前端?这是否有助于大型网站更好地扩展?
当人们说他们的前端是用C#构建的时,这是否意味着他们使用的是前端框架(如.NET)和后端的其他框架(如Spring)?还是意味着完全不同?
Answers:
“前端”和“后端”可能是模糊的术语,尤其是在企业应用程序中。“前端”可以表示UI,也可以是整个应用程序。“后端”可以用来表示内部,也可以是消耗的数据库或外部服务。术语的含义通常完全取决于您与谁谈话。因此,您是否可能问过“嘿,那是什么意思?”
当您进入大型企业开发时,您将有很多团队编写大量代码。这些团队将在不同的位置使用不同的范式以不同的语言进行开发。此代码中的某些代码将需要一起工作,而大部分代码则不需要。
我在一家大银行工作。我的团队使用C#开发我们的应用程序。所有的。但是,我们使用的Web服务大部分是用Java编写的,这些服务与其他服务通信,而其他服务则与其他服务通信,这些服务从适当的数据存储中获取帐户数据,以及谁知道这些语言使用什么语言。
简短版:人们使用工具来完成工作。
我认为您需要扩大一个问题:为什么大型软件项目使用不止一种编程语言?
有许多可能的答案,最值得注意的是:
实际上,性能考量从来都不是原因,除非在诸如高频交易之类的对性能至关重要的应用中,在这些领域中,以具有更好的运行时性能的语言(例如C ++)编写关键的核心引擎可能是有益的,但使用Java或C#等更高级别的支持系统(UI,报告等)。
它在大型企业中是相对的。
在我公司里,烟囱大概是
(html/javascript)--> (JSP on Tomcat and Java based WebCMS) -> (.Net SOA)
因此对于Web开发团队来说,前端是HTML / JS,后端是Java。对于企业而言,前端是Java,后端是.Net。
实际上,.Net层必须与COBOL / UNIX应用程序一起使用以进行开票和索赔,因此从这个角度来看,.Net是前端,而COBOL是后端。
是的,正如其他人提到的那样,我们有UX设计人员,HTML / JS开发人员,Java开发人员,Web中间件,.Net开发人员,SQL开发人员,COBOL开发人员团队在堆栈的每个部分工作。
实际上,在任何足够大的企业中,都是乌龟。
令人困惑的语义
这是一个语义问题。当有人说.NET前端或Java前端开发人员时,他们通常是在谈论对模板语言非常了解的人,也许是永远不要再使用的框架(例如用于尝试隐藏网页模板的Webform)。从不希望或至少被假定为不希望了解所有这些废话的应用程序开发人员通过http墙(即“ Web开发”)获取内容。对于.NET和Java混合的情况,我不确定,但是我只能猜测,就MVC而言,他们让Java负责所有业务模型,而.NET处理了所有其他方面,这将更好地描述作为“中间层”,但仍然是所有服务器端。
真正的分离是服务器上发生的事情与客户端或浏览器上发生的事情。您可以轻松地将要发送或代表前端的HTML与“前端开发”混合在一起,因此在讨论我通常的工作时,我更喜欢使用术语客户端和服务器端而不是前端和后端来避免混淆, (通常是客户端工作)。
客户端语言
我们在浏览器上使用相同语言集的原因是因为浏览器位于接收端,并且在大多数情况下(目前,Microsoft和Adobe对此一直存在致命的抵制),没有人愿意发送三个同一客户端的不同版本可以满足每个潜在客户的需求,或者需要安装专有插件才能使Web正常工作。此外,这三种语言实际上很好地封装了客户端的关注点,从而使我们能够通过保持文档结构,外观和行为之间的松散耦合来快速构建和修改Web应用程序前端。您可以更改其中一个而不必很轻易地更改其他两个。
服务器端语言
当然,在服务器端Web上有成千上万个选项的原因是因为您可以。是您的服务器。它所要做的就是通过http / ssl进行通信,其余的一切取决于您。顺便说一下,JavaScript现在是一个选择,但这提出了一个有趣的问题。您是否仍然应该将Web应用程序当做类似HTTP墙上的两个应用程序。我的痛点见解是,是的,应该,我喜欢Node.js。
原因是业务风险平衡。
假设您是一个城市中的大型雇主。您必须雇用许多开发人员来构建许多不同的服务。假设您最初的评估是Lanuage A最适合您的兴趣,并且您想从中开始。
如果您致力于一项技术,则可能会耗尽人才库。当语言B的明星指日可待时,您确定要聘请像样的Langauge A吗?如果明天Langauge A的框架抓住并得到主要开发人员的支持怎么办?如果明天会有令人惊奇的语言C,您会因为五年前致力于语言A而忽略它吗?
理想情况下,您想要的是一个具有不同语言的异构系统,可以反映当前的人才库和技术趋势。您希望这种平衡随着人才库和趋势的变化而缓慢变化,以便您的所有系统在任何时候都可以使用,并且可以雇用人员来维护它们。
...这就是公司所做的事情。
将您的前端和后端视为使用相同数据源的单独应用程序会很有帮助。
即使对于较小的站点,您也可以将前端视为客户端与之交互的对象,而将后端视为类似CMS的对象。这些可以轻松地是单独的MVC应用程序。前端仍然需要模型和控制器来运行-毕竟,控制器是站点访问者的切入点,而模型将成为您从数据库向用户获取数据的方式。
我倾向于在后端使用Django / Python作为CMS,在前端使用Rails,CodeIgniter或Spring MVC。通常别无选择。客户已经在前端以某种语言设置了一些旧站点,而他们只需要CMS解决方案。如果不告诉他们,大多数客户甚至都不知道CMS正在运行其他语言或框架。
这实际上是找到最适合您要构建的站点的方法。前端和后端实际上只需要共享数据库,因此只要它们两者都可以使用,就可以随时为当前任务选择最佳选项。
后端语言的一个示例是PHP,它是一种脚本语言。当请求一个PHP页面时,服务器读取PHP代码并呈现标记。结果是发送给您的HTML。您,网页查看器,永远不会看到一行PHP代码。假设Web服务器管理员正确完成了他或她的工作,服务器将并且永远不会向您显示实际的PHP代码。当页面被提供并且代码转换的结果是HTML时,将对其进行解析。