【问题标题】:Architecture for new ASP.NET web application新 ASP.NET Web 应用程序的体系结构
【发布时间】:2011-02-22 11:17:36
【问题描述】:

我正在维护一个应用程序,该应用程序目前只是一个 Web 服务(使用 WCF 构建)和一个数据库后端。 Web 服务构建在具有 linq-to-sql 数据访问部分的层中,该部分在自己的程序集中具有核心功能,并且在此之上是包含 WCF 代码的 Web 服务程序集。核心程序集还处理所有业务逻辑规则(实际上很少)。

客户现在想要应用程序的 Web 界面,而不是仅仅通过使用 Web 服务的其他应用程序来访问它。我对现代 Web 应用程序设计非常迷茫,所以我想要一些关于 Web 应用程序使用什么架构和框架的建议。 Web 应用程序将使用具有业务规则和 linq-to-sql 数据访问层的相同核心程序集作为 Web 服务。

我想到的一些概念是:

  • ASP.NET MVC(或 MVC-2)
  • 网络表单
  • AJAX 控件 - 可能让 AJAX 控件通过 JSON 访问现有的 Web 服务。

还有什么我应该研究的概念吗?哪个最适合新项目?

开发工具是面向 .NET 3.5 的开发人员的 Visual Studio 2008 Team Edition。如果有任何好处,升级到 Visual Studio 2010 Premium(甚至可能是 Ultimate)是可能的。

【问题讨论】:

  • 如果可以的话,我建议使用 .NET 4。 WinForms 和 WCF 有很多改进。
  • @R0MANARMY 您能否提供列出 WCF/WinForms 改进的来源?

标签: c# asp.net-mvc architecture asp.net-ajax


【解决方案1】:

一定要深入研究ASP.NET MVC2

我们所有的项目现在都是使用 ASP.NET MVC2 开发的。它不仅仅是高度可扩展。它也非常可测试。从长远来看,这会带来更好的可维护性应用。

WebForms vs. MVC2 点——(凭经验说话):

可扩展性:

在我们公司,我们有很多使用 WebForms 的应用程序,然后我们根据客户的需要对其进行更新和更改。

我认为您的客户在不久的将来会要求对应用程序进行更多更改。调用其他服务,也许您必须对最终产品的某些部分进行返工以符合他们的意愿。

随着即将推出的Cloud ComputingWindows Azure 平台,您可能需要跟上您的代码。

ASP.NET MVC 绝对支持随时扩展应用程序的概念。

我记得我们的一位客户走过来问我为他们的应用程序提供扩展(他们有一个会员管理系统),该功能将包含类似于将当前视图导出为 csv 文件的链接,所以他们可以用它做办公室的事情(主要是连载信件)。

设置该功能并不是什么大问题。 (花了大约 2 个小时,包括编写测试) - 让我们去测试:


可测试性:

使用WebForms,我们对编写测试并没有太大兴趣,因为这样做很痛苦。 我记得写了一些测试至少有一些证明,但让我们放弃这个话题.. (:p)

我们对自定义类进行了测试,但无法真正测试 WebForms 中的所有 EventHandler。

由于这个可测试的环境,我们的 CodeBase 使用起来更加干净和节省。我只是检查了一些代码,修改它,运行所有测试,然后:哦,它因奇怪的行为而崩溃了! - 让我们再次解决这个问题。早些时候,我记得我和我的同事坐在一起调试并试图找到这些错误几个小时。

对于 ASP.NET MVC2,我们现在缺少测试! 我们要求各种人(甚至是非 Web 人员)提供测试用例,我们可以将其输入到我们的TestSuite

是的,还有一些 AJAX 控件:


AJAX 能力:

您询问了 AJAX 控件以及与 ASP.NET MVC 的结合,我强烈建议您查看 Telerik ASP.NET MVC UI Controls

如果这不适合您,我们还会大量使用 jQueryjQuery UI

有了 ASP.NET MVC 和 HTML 视图,这些库不仅使用起来很有趣,而且看起来非常漂亮。

没有random-html-tag-id-value自动生成了!

但我最喜欢的是:你终于可以真正再次重用你的代码了。


这些框架远不止这些,还有 T4 模板系统。使用Html.EditorFor() 方法为您的ViewModels / DomainModels 自动脚手架,当然还有一种使用IoCDI 范例的简单易用的方法。

假设您提出的问题主要是与 .NET Framework 相关的标签,您可能会坚持下去。

为了保持帖子的完整性,还有其他框架也一样好(甚至更好):

And many many more!

【讨论】:

    【解决方案2】:

    如果您需要对数据进行简单的 CRUD 访问,还有 DynamicData 可能是合适的。

    【讨论】:

    • DynamicData 看起来很有趣,但不幸的是,我在这个项目中的需求比基于数据库中确切实体的简单 CRUD 更高级。
    【解决方案3】:

    Web Service Software Factory (WSSF) 在您的情况下可能会派上用场。

    这将允许您在使用 WCF(或标准 Web 服务通信协议)设计服务器/客户端通信时定义您的合同(返回的 XML 实体(如果您选择 XML)等)。

    WSSF 偏爱ASP.NET MVCASP.NET MVPherethis article 显示了MVP 架构的一个简单示例。

    就我而言,我经常使用MVCMVP 的一些类似混合架构,因为它们具有不同的优点,它们结合在一起可以填补彼此的改进点。

    【讨论】:

      【解决方案4】:

      我还建议您研究 Silverlight。

      http://www.silverlight.net/learn/

      【讨论】:

        【解决方案5】:

        我认为在客户端站点和管理页面(站点)内的 WebForms 上使用 MVC

        【讨论】:

        • 如果您有任何输入/html 约定,您将无法在管理部分使用它们。此外,您可能很难让您的 CSS 在这两个部分中工作。如果您使用 AuthenticationFilters 进行安全保护怎么办?您将如何使用 WebForms 部分中的那些? (当然有可能,但使用 MVC,它“就可以工作”。)最好选择一种技术并坚持使用它,除非你有一个非常具体的用例需要不同的东西。
        猜你喜欢
        • 2011-10-05
        • 2011-04-07
        • 2011-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-23
        • 2017-10-10
        • 1970-01-01
        相关资源
        最近更新 更多