【问题标题】:Decision about web application architecture关于 Web 应用程序架构的决策
【发布时间】:2011-09-10 00:16:36
【问题描述】:

我正面临一个关于我将要研究的 Web 应用程序架构的决定。 我们是一个小团队,实际上我会独自工作(每个人都在做其他事情)。

此应用程序将包含基于ExtJS library 的前端构建 它将使用模型“加载页面,构建 GUI,永不刷新”。
在网络“桌面”上会有很多数据窗口、地图视图(使用 openlayers + GeoExt)和其他东西。
GUI 应该是灵活的,并允许每个用户修改(并保留)布局以满足他/她的需要。

应该可以将应用程序划分为模块/部分/ ...然后让特定组中的用户仅使用特定模块。也就是说,每一组用户 可以在网络“桌面”上提供不同的 GUI。

问题是:

  1. 首先,这种方法好吗?
    会有很多来自客户端的 AJAX 调用, 这可能是个问题。

  2. 如何处理客户端的代码复杂性?
    到目前为止,我决定使用 dojo.require / dojo.provide 功能并将客户端代码划分为模块 (对于生产,它们将使用 dojo 构建系统组合在一起) 我正在考虑在客户端使用一种 IoC 容器,但还不确定是哪一种。
    很有可能我会自己写一个,用JavaScript这样的动态语言应该不难。

  3. 如何处理服务器上的 AJAX 调用?
    我应该在服务器端使用 WCF 吗?还是只是普通的 ashx 处理程序?

  4. 如何处理服务器端的代码复杂性?
    我想使用 Spring.NET。这种方法可能有助于解决模块化问题。

  5. 数据访问 - 在这里我很确定要使用什么: 对于 DAL 类,我将使用 nHibernate。然后我使用 Spring.NET 将它们与业务类组合在一起。

我真的很感激一些关于走哪条路的建议。
我知道很多技术,但我只使用了其中的一小部分。
我没有时间去探索所有这些并接受这个决定。

【问题讨论】:

  • 我不认为 JS 的 IoC 是必要的。我还推荐 ASP.NET MVC 并提到如果没有 javascript,您的网站将无法运行。
  • “每个人都在做其他事情”。这听起来不是个好主意。我建议您至少在每个主题上成对开始工作,以防止任何人成为瓶颈。
  • 还看看 WCF REST 功能...它大大简化了对 Web 服务的访问(因为它包括构建正确的 url)。此外,MS 还提供了“DataServices”(以前称为 Astoria)的概念,它允许为 CRUD 操作创建 Web 服务端点(其余兼容)。至少,为什么要使用 nHibernate 而不是保持 100% MS 技术(EF Code First 很棒:))
  • @Steven:即使我同意你的观点,这也不是问题:)
  • @Steve B:这就是这个 cmets 部分的美妙之处,我不必回答这个问题 ;-)

标签: javascript asp.net ajax architecture inversion-of-control


【解决方案1】:

我们做这种类型的单页界面,我在其中为我们的客户进行了相当大规模的工作。 (我们的网站不是互联网网站)

  1. 这似乎对我们很有效。您拥有的 js 越多,维护起来就越困难,因此尽可能多地进行自动化 js 测试,并尝试以 mvc 方式分解您的 js 逻辑。 4.0 应该让这变得更容易。
  2. Ext 4.0 内置了此功能,如果您试图限制您下载的代码。如果您日复一日地拥有相同的用户,那么我认为最好将所有源代码(压缩和缩小)并缓存起来。
  3. 我们发现 asmx 工作得非常好。我对 wcf 没有任何意见,但最后我看起来它似乎比它的价值更麻烦。我知道他们最近做了很多改进。虽然 asmx 可以正常工作(只需更改一些请求标头并在客户端管理“d.”)。
  4. 我们的服务器端数据访问层非常复杂,但是 ajax 调用的接口非常简单。您没有真正提供足够的信息来回答这部分。我会尽可能简单地开始并经常重构。
  5. 我们也在使用 nHibernate。对我们来说很好。我们围绕它建立了一个 DDD 模型。不过,要做到这一点可能需要做很多工作(不确定我们是否经过几个月的努力才能做到这一点)。

如果我是你,我会从 extjs、你的网络服务技术和 nHibernte 开始。

【讨论】:

  • 感谢大家的回答。 @Jerry:您是说 DDD 的“领域驱动设计”吗?
  • 是的,DDD 是领域驱动设计。它对我们来说效果很好,但根据你在做什么,它可能会有点矫枉过正。我们的旧系统过去常常在所有地方实现相同的验证逻辑(而且它们从未匹配过),因此 DDD 帮助我们实现了集中化。
【解决方案2】:

我会推荐带有 Razor 的 ASP.NET MVC 3,而不是大量的 Javascript 和对服务的调用,您可以对控制器中的操作进行 ajax 调用,这将使您拥有更多可维护的代码并使用像 Ninject 这样的 IoC。 EF 而不是 NHibernate。 但这是你的决定。

【讨论】:

    【解决方案3】:

    我会考虑使用像Google Closure Compiler 这样的工具,尤其是在您处理一个非常大的项目时。我对 ExtJS 没有太多经验,但是 JavaScript 中的大型项目困难,而像 Closure Compiler 这样的东西往往会使它变得更容易。

    【讨论】:

      猜你喜欢
      • 2011-05-30
      • 1970-01-01
      • 2011-09-30
      • 2017-07-09
      • 1970-01-01
      • 2011-10-23
      • 2011-12-06
      • 2016-10-07
      • 2011-11-29
      相关资源
      最近更新 更多