对客户端和服务器使用相同的语言有多重要?


11

我一直在评估一个移动项目的体系结构解决方案,该项目除了本机应用程序外还将具有Web服务/应用程序,并且一直在研究各种库,框架和堆栈,例如Meteor,这是一种“开放式堆栈封装框架” ,与Node.js紧密绑定。

关于在客户端和服务器端使用相同语言的好处有很多讨论,但我没有得到。我可以理解,如果您想在客户端和服务器上都镜像Web应用程序的整个状态,但是却在努力寻找其他胜利...工作流效率?

我试图理解为什么将客户端/服务器语言奇偶校验视为圣杯。为什么客户端/服务器语言奇偶性在软件开发中很重要?


12
我认为这不一定是件好事,特别是当JavaScript是有问题的语言时。
Latty

4
我必须承认,我还没有达到与JS的顿悟时刻,因此还没有掌握,你为什么会想用它写服务器代码,但那是另一个话题..
牧田

1
感谢您在Stack Exchange Programmers上发表第一篇文章。有关最大化赞成票和最小赞成票的更多信息,请阅读FAQ。您可能被否决了,因为您的问题更多是聊天话题,而不是具有特定答案的话题。可能需要一段时间才能习惯此处的格式。缺少细节的简短答案被否决。辩论主题也是如此。在某个中间位置,一个问题或答案是特定的,但足够普遍,并以适当的细节达到主题。
DeveloperDon

1
我什至反对。对于服务器和客户端使用相同的语言,您将面临通信中纠缠和特定于语言的功能的风险。
Pieter B

3
@Makita我认为这是一个正确的问题,但是人们在问例子时往往会对投票否决感到满意。我删除了原始问题的某些部分,并将您的问题集中于为什么客户端/服务器语言奇偶性很重要。
maple_shaft

Answers:


5

在专业方面:

  • 如果双方都可以重用模式和代码,那么一次实现相似的逻辑和数据将有很大的效率。

在CON方面:

  • 客户端可能主要是非常适合标记或脚本语言的视图,而服务器可能主要是更适合另一种语言的业务逻辑。

在Web开发中,语言激增,为系统的特定部分创建了功能强大的工具,并且需要开发人员或开发团队学习许多专业知识。在其他事务处理或遵循系统设计方法的嵌入式系统等领域中,通用语言可能会有所节省。

新的Javascript框架似乎很快出现在我们眼前,并且已经完成了一些工作,以捆绑用于后端的API和用于前端的工具。保持灵活性和客户端和服务器端代码之间的关注点分离是很明智的,这样您就可以在它们之间自由浮动,而又不会因使用特定工具而停留太长时间。


14

大概的好处是:

即,它使项目经理的资源管理更加容易,并且几乎没有技术收益(如果雇用一堆小马,甚至可能带来负面的技术收益)


1
如果您自己进行开发,那么这是一个好处,因为服务器和客户端之间没有“心理”切换。如果你想要做的事,并在JavaScript中有一个巨大的经验,你可能会得到更好更快的结果这样一来,但是这可能是所有...
K。。

您是否还会说没有技术上的劣势,可能对每个子系统使用不同的语言也有优势吗?
Michael Borgwardt 2012年

1
@MichaelBorgwardt假设每种语言都非常适合子系统,我会说是的,没有任何技术上的劣势(虽然也许也不是很大的优势),但是可能会对团队的发展和招聘产生重大影响。当然,大多数子系统都可以用任何语言轻松实现,所以我不希望看到这种极端情况。
jk。

关于这个想法不好的说法是没有道理的。有很多语言可以编译为JavaScript和服务器端语言,包括Lisp,实际上这是Joel博客文章所称赞的SICP课程中使用的语言。
back2dos 2012年

@ back2dos希望这阐明它
JK。

2

这样做的好处是,您可以在双方(在某种程度上)重复使用人们的专业知识和代码。

开发人员需要掌握一种语言并形成一个单一的库。而不是两个专业知识库。这使他们之间的知识传递更加容易,也使他们更容易在客户端和服务器端之间切换工作。最后,由于他们共享相同的技术背景,因此在讨论技术问题时有助于与“另一方”的团队成员进行交流。

有时在客户端或算法或两者兼有的状态是有用的。有时,双方都这样做。让我们以多人游戏为例:您需要在客户端和服务器上都表示游戏状态。另外,您需要在客户端(为了响应)和服务器(在验证玩家的动作)上实施规则。能够为这些事情重用代码是一个很大的优势。...在其他一些应用程序中,您根本不需要它...这完全取决于情况。

...当然也有缺点,但这是另一篇文章;)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.