0

我对 ASP.NET MVC 和一般的 .NET 框架有点熟悉(我在工作中使用它)。
我一直在考虑开始一个个人项目(一个网站)。然而,我不想被绑定到一个特定的平台(这让我很困扰)。
这让我开始研究 Mono。不过,就我所见,Mono 在某些对我至关重要的方面(或者我真的很想拥有)落后于 Microsoft 的 .NET。其中一些是:

  • LINQ 到 SQL。刚刚的 Mono 团队(Mono 2.6)在 DBLinq 项目的帮助下发布了对 LINQ 的支持。问题是 DBLinq 的主要测试平台是 MS SQL SERVER 和 SQLite。在我看来,PostgreSQL 和 MySQL 有点被抛弃了。此外,LINQ to SQL 刚刚实现,因此它让我思考它何时会变得成熟。
  • 在 Linux 上托管 Mono。其中很少有可用的。

另外,我想准备好在服务器上处理繁重的处理(这是一个主要问题),而 Twitter 的经验让我远离 Ruby on Rails,但如果你能证明 RoR 规模很大(请显示基准/事实而不是意见)我愿意尝试。

  • 我应该花时间学习不同的 Web 框架,还是应该在不久的将来(1~2 年)在 Windows/SQL Server 以外的平台上依赖 Mono 的进步和托管选项。
  • 在可扩展性方面,我倾向于认为 C# 具有可扩展性的固有方面(强类型和字节码,而不是解析/解释)。我这样想有错吗?
  • 有没有办法以代码不会托管在服务器上的方式与其他框架一起工作(我接受 python/ruby/anything VMs 和其他)
4

1 回答 1

1

这是一个老问题,所以我可能会比原始海报更多地回答其他人:

托管

如果您使用 Mono 编写,您可以在 Windows、Mac 或 Linux(或 Solaris、FreeBSD 和其他不太可靠的系统)上托管。如果您打算在 Windows 上托管,为什么不在真正的 .NET 上运行您的 Mono 应用程序呢?

如果您不是自己托管它,为什么还要关心它是否托管在 Mono 上?您当然可以使用 Windows、Linux 或 Mac 在 Mono 上编写应用程序,然后将其托管在 Windows/.NET 主机上(如果这些主机最便宜且最容易找到)。只需将 .NET 视为 Mono 的 MS 实现。

我最初遇到了相反的问题。即使我的雇主提供了 Windows 开发环境,我也想在 Linux 上托管。我在 .NET 中开发并托管在 Mono/Linux 上。Mono 以这种方式为我工作得非常好。

我现在的雇主是 Mac 疯子。我昨天刚刚在我们的 Mac 服务器上部署了一个 ASP.NET MVC2 应用程序。我在我的 MacBook Pro 上写了整个东西,一次都没有碰过 Windows。

我最喜欢在 Linux 上运行 .NET/Mono 的主机是Linode。最便宜的计划是每月 20 美元,但我可以在同一台服务器上托管任意数量的应用程序。性能非常好,因此在每月 5 美元的主机上运行良好的任何东西都可以作为 Linode 实例上的四个应用程序之一运行良好,这是肯定的。

与 .NET 的兼容性

我发现最好将 Mono 视为一个平台本身,而不是您的 Microsoft 应用程序的兼容性解决方案。Mono 支持几乎整个 .NET 框架。我喜欢这个,因为它是一个很棒的框架,但我并不真正关心它是否与 MS 兼容。

没有冒犯,但我完全不理解您对“Mono 不支持 LINQ-to-SQL 令我满意,因此我正在考虑使用 Ruby-On-Rails”的含义。Mono 比 Ruby 更支持 LINQ-to-SQL 我会告诉你的。您可以说您坚持使用 Windows 只是因为我认为您确实需要 LINQ-to-SQL。“跨平台”还是“LINQ-to-SQL”对您来说更重要的是什么?

Mono 为您提供了多种数据访问选择。如果您想要像 Rails 提供的 ORM(对象关系映射器),那么您可以选择 NHibernate、Subsonic 或 Castle ActiveRecord 之类的东西。使用 Mono 2.10,您甚至可以使用 WebMatrix Data。当然,您也可以使用良好的 'ole ADO.NET,这就是所有这些东西的基础。

哦,我们不要忘记 Mono 确实支持 LINQ-to-SQL 的事实。我只将它与 SQLite 一起使用过,它工作得很好。我同意它虽然落后于.NET。您现在可能担心实体框架支持。请参阅我上面的评论。

在我看来,问题是 Mono 数据访问与 Rails 数据访问相比如何。我的回答:Rails 集成得更好(更简单),而 Mono 更强大、更灵活。

重型加工

这就是 .NET 和 Mono 真正大放异彩的地方。

您认为编译后的字节码将比解释代码快得多,并且像 C# 这样的静态语言将比像 Ruby 这样的动态语言快得多,这是正确的。当然,最终一切都取决于实现。

我也同意像 C# 这样的静态语言在其他方面有助于扩展性。不过,这确实是个人意见的问题。肯定有人认为用动态语言编写和维护大规模解决方案是可行的。当然,我没有看到很多人这样做。.NET 和 Java 成为企业标准是有原因的。

底线

你应该学习另一个 Web 框架吗?嗯,我认为你应该。这对头脑有好处。

其他 Web 框架是否比 Mono 或 .NET 更好?好吧,这当然取决于需要。我认为 Rails 的人可能比一般的 .NET 人群更快地抽出网站。不过,ASP.NET MVC2+ 确实缩小了差距,我更愿意维护和扩展 .NET 解决方案而不是 Rails 解决方案。另外,我很喜欢 C#,所以我觉得 Ruby 本身并没有那么令人满意,我只需要使用它。当然,这只是我。

另外,只有我,但我发现 Mono 是一个出色的跨平台 Web 开发框架。我每天都选择它而不是其他解决方案。我还发现 Mono 非常适合大多数 .NET 生态系统(尤其是开源世界)。不过,如果你真正想要的是使用最新最好的 MS 东西,并希望 Mono 有时能让你在 Linux 或 Mac 上运行它,那么你可能会失望。

如果 Windows Presentation Foundation (WPF)、Entity Framework 或在较小程度上 LINQ-to-SQL 是您的应用程序策略中最重要的部分,那么 Mono 不适合您。

如果您想要一个平台,它可以为您提供 .NET 的所有巨大优势,并且几乎可以在您需要的任何地方运行,那么 Mono 很难被击败。

于 2011-03-03T19:53:45.770 回答