2011-04-25 42 views
0

我们(我的团队和我)有一个大型的网络项目,可以处理很多用户(至少有15,000个用户!)。在精化阶段,我们决定使用MVC风格进行编码。我们面临权衡(在这个项目中,所有的行为都应该由经过认证的用户来执行)。大型网站的MVC风格适合哪种粒度的控制器?

设计的一种方法可能是:控制器获取请求,并根据它创建(从DB加载)负责对象的请求,然后将该对象的引用保存到控制器,最后添加控制器到用户的会话。这种风格需要控制器成为具有高频率的用户可能行为中的多个行为的粗粒度类。

设计的另一种方式可以是:控制器得到的请求,然后创建一个请求负责对象,但该控制器是无状态的,有根据,例如网站的一个页面的特定行为。通过这种方式,我们应该为每个页面创建一个控制器,并且如果它需要某些页面中常见的信息,我们必须从DB或缓存中加载它们。

  • 在第一个样式,控制器应该是因为减少创建和垃圾回收的粗颗粒状物体,因此它创建用户通过认证后,并不会被垃圾,直到会话过期一次。会话中存在的对象的生命周期是一直到会话过期,所以我认为这可能会导致内存不足!
  • 在第二风格的用户到其他页面的每一个转型控制器应创建并从数据库中提取信息,可能会导致性能问题!

我的要求:我想比较它们与两个方面,内存使用情况和性能!如果有任何建议,我会很乐意提到它!

举个简单的例子,请参见下面的图片:

http://v1.iimmgg.com/images/is7gr/fb0f6b763eea5294815dcb2d50a12f56.png

+0

也许我失去了一些东西,但你为什么要存储在会话控制器? – KTF 2011-04-25 19:34:37

+0

@KTF:我可以存储实体对象而不是控制器参考它,但我认为控制器不是一个大对象(它几乎是无状态的),所以将它存储在会话中,创建和删除它可以减少! – ghedas 2011-04-27 12:09:09

+0

你在控制器的构造/最终化方法中做了大量的数据I/O或其他事情吗?如果不是这样,实际创建/破坏类本身的开销很小。仍然不确定为什么要在Session中存储控制器。 (我假设你正在使用MVC方法?) – KTF 2011-04-28 19:31:08

回答

0

我的经验法则是按照REST principles

每个企业实体是一种资源。资源应该有控制器。

值对象,像电子邮件,资金等均不资源。

在少数情况下,当简单了权重的复杂额外的控制器将增加和实体直接相关的控制器应合并。

0

实际上将许多控制器网站将不会让但从DB accesss点差,因为对象保持整个会议期间。在许多控制器中分割网站并不意味着你在分割会话。

0

大部分的时间你的数据访问层决定了系统的在MVC应用程序控制器的尺寸几乎没有影响性能。从设计角度来看,我建议你在一个控制器中保持逻辑相关的动作,这样你可以有很多小控制器。为了性能的角度来看,你应该关注你的数据库访问并找到它所属的优化。