我对红宝石本身的经验不多.我将聘请某人编写一个基于Web的应用程序,我希望它是用RoR编写的,但我推荐使用mono.我猜是因为他们喜欢单声道,因为他们认为RoR很慢.
整个应用程序将是某种社交媒体元管理工具.将有基于前端网络的部分,然后是后端做"真实的东西".
我根本没有单声道的经验,我没有足够的经验来轻松地说RoR是最好的选择.
我明白如果RoR配置得当,它可能会非常快.我读到RoR在可扩展性方面存在一些问题.我将启动应用程序很小,如果它成功,我需要扩展它.
根据
性能
可扩展性
容易测试
易于维护,开发代码/项目
(我喜欢ruby,但我不会自己成为开发人员.如果对这个问题有这样的答案,我更愿意选择'更好'选项)
请随意提出其他建议......
如果你不打算自己写,你可能想要写下最容易写的人.
完全披露:我现在开发了几个使用Mono的网站,我喜欢它.我使用过Ruby-on-Rails,但没有像我在Mono中那样大的东西.记在脑子里.
快速回答:在更大的方案中,Ruby-on-Rails和ASP.NET MVC有更多共同之处.我的选择是Mono上的ASP.NET MVC,但我怀疑你会后悔选择.
架构:如果您想要一种开箱即用的方法,请选择Ruby-on-Rails.如果您希望能够从众多选择中选择您认为最佳的技术,请选择.NET(Mono).
Ruby-on-Rails更像是一个交钥匙解决方案,因为它提供了一种标准方式,可以开箱即用..NET(Mono)提供了更多功能(我的观点可以说)但是有很多不同的部分可供选择,你必须自己选择技术堆栈.例如,RoR有一种访问数据库的标准方法,而.NET Mono允许/强制您从十几种不同的方式中进行选择.
Mono和.NET通常会更好地分离关注点,因此您的纯粹主义者可能会喜欢这样.如果没有,你实际上找到了你的袖子,并根据自己的喜好完成Ruby的态度.
性能和可伸缩性:这应该清楚地转到.NET和Mono.事实上,我认为运行Ruby-on-Rails的最快方法是使用IronRuby在.NET上运行它.StackOverflow是用ASP.NET MVC编写的,考虑到流量,它显然表现很好.证明就在布丁中.也就是说,性能瓶颈可能不是您选择的框架.
测试:旧式ASP.NET(现在称为WebForms)被认为很难测试.较新的ASP.NET MVC设计易于测试,与RoR类似.一个主要因素是在Mono中你可能会使用静态类型语言(如C#),而Ruby当然是一种动态类型语言.您必须使用动态语言编写更多测试(因为编译器/解释器不会捕获类型问题),但如果您不打击编译器,也可以更容易编写测试.我认为这是一个品味和风格的问题(我喜欢静态),但这是回答这个问题的一个主要因素.
当然,由于.NET/Mono是一个多语言平台,因此您总是可以用动态语言编写ASP.NET MVC测试.你甚至可以用Ruby(IronRuby)来做.也许这将是两个世界中最好的(静态检查您的真实代码和测试中的灵活动态).我已经考虑过使用IronPython进行测试.
维护和开发:这是一个艰难的过程.这取决于您的编写内容,您可能需要的第三方库以及您将使用的工具.我会说RoR可能是更先进的MVC框架.我自己的想法是Ruby-on-Rails可能更容易编写,但有点难以维护.
社区:我比Ruby更喜欢Ruby社区,但我认为我最喜欢Mono.这让它有点混乱.Mono的核心人物(就像Michael Hutchinson在这里回答的那样)简直太棒了.我非常喜欢MonoDevelop作为工具(IDE).它不断变得越来越好.迈克尔,如果你有任何关系,感谢你的Git支持.:-)
工具:如果您正在为Mono编写,您可以使用整个.NET工具(VisualStudio,ReSharper,Reflector等),因此很难被击败.假设你在Windows上开发当然.在Linux或Mac上,Mono的首选工具是MonoDevelop.它支持IDE中的版本控制,软件调试器和NUnit测试,并且完全是跨平台的.
似乎很多Ruby人只使用简单的文本编辑器.这可能只是因为IDE不像提供动态语言那样提供动态语言.这是一个关于人们喜欢Ruby的问题:
您更喜欢Ruby IDE?
编辑:只是为了让事情变得混乱......还有另一个用于.NET/Mono的MVC框架,它更像是Ruby-on-Rails; MonoRail甚至还有ActiveRecord的实现.MonoRail实际上比ASP.NET MVC更长,但是现在我会坚持使用ASP.NET MVC,因为这是未来的发展方向.顺便说一下,ASP.NET MVC是开源的,并且Mono开箱即用(实际的Microsoft代码).
我可以更多地谈论Rails而不是Mono.如今,RoR具有相当可扩展性,可提供所有云托管服务.Web应用程序使用该数据查询数据和呈现网页,这实际上并不是什么大不了的事.大多数性能问题都是由数据库和架构设计问题引起的,而不是Web框架引起的.通常,数据库响应时间使服务器处理的其他部分相形见绌.RoR也很容易测试.与我使用的其他语言相比,测试是一个更自然的开发部分.当我开始编程RoR时,我习惯了更加结构化的Java世界,而更加动态的Rails让我赢得了Web开发.
首先,我使用MonoDevelop,一个Mono的跨平台IDE(包括ASP.NET和ASP.NET MVC),所以请随意考虑我的答案有偏见,但希望无论如何它都会有所帮助.
性能:一个像样的JIT编译器(Mono)应该比解释器(Ruby)快得多.但这也取决于程序员的技能 - 编写良好的Ruby 可能比编写真正糟糕的C#更快.您使用的库和数据库以及缓存机制也是一个重要因素,但这些并不是语言/框架的基础.
可扩展性:AFAIK没有Web应用程序可伸缩性的灵丹妙药,虽然我没有这个领域的实际经验,但这里有一些我已经掌握的信息.这实际上取决于您的数据库使用情况,会话状态的存储方式以及缓存的实现方式.这对于任何一个框架来说都不是真正的基础 - 一旦你开始扩展到多台机器,你可能会有许多机器/进程用于数据库服务器,缓存服务器,消息队列,前端,静态内容服务器等.可能只有前端将是ASP.NET或ROR,如果它们是无状态的,您可以简单地克隆它们并处理后端的可伸缩性问题.
测试:我不能代表Ruby,但ASP.NET MVC(但不是vanilla ASP.NET)的设计可以使用.NET测试工具(如NUnit(Mono自己的单元测试使用NUnit))轻松测试.
维护和开发:同样,我不能真正代表Ruby,但是在开发人员已经体验过的语言和框架中开发(至少最初)是最容易的.此外,.NET在Windows上有一些令人惊叹的开发工具--Visual Studio,ReSharper等 - 而且你可以雇佣大量经验丰富的C#和ASP.NET开发人员,但很少有人会知道Linux/Mono.
另外,StackOverflow使用ASP.NET MVC :)