我们(我的团队和我)有一个大型的网络项目,可以处理很多用户(至少有15,000个用户!)。在精化阶段,我们决定使用MVC风格进行编码。我们面临权衡(在这个项目中,所有的行为都应该由经过认证的用户来执行)。大型网站的MVC风格适合哪种粒度的控制器?
设计的一种方法可能是:控制器获取请求,并根据它创建(从DB加载)负责对象的请求,然后将该对象的引用保存到控制器,最后添加控制器到用户的会话。这种风格需要控制器成为具有高频率的用户可能行为中的多个行为的粗粒度类。
设计的另一种方式可以是:控制器得到的请求,然后创建一个请求负责对象,但该控制器是无状态的,有根据,例如网站的一个页面的特定行为。通过这种方式,我们应该为每个页面创建一个控制器,并且如果它需要某些页面中常见的信息,我们必须从DB或缓存中加载它们。
- 在第一个样式,控制器应该是因为减少创建和垃圾回收的粗颗粒状物体,因此它创建用户通过认证后,并不会被垃圾,直到会话过期一次。会话中存在的对象的生命周期是一直到会话过期,所以我认为这可能会导致内存不足!
- 在第二风格的用户到其他页面的每一个转型控制器应创建并从数据库中提取信息,可能会导致性能问题!
我的要求:我想比较它们与两个方面,内存使用情况和性能!如果有任何建议,我会很乐意提到它!
举个简单的例子,请参见下面的图片:
http://v1.iimmgg.com/images/is7gr/fb0f6b763eea5294815dcb2d50a12f56.png
也许我失去了一些东西,但你为什么要存储在会话控制器? – KTF 2011-04-25 19:34:37
@KTF:我可以存储实体对象而不是控制器参考它,但我认为控制器不是一个大对象(它几乎是无状态的),所以将它存储在会话中,创建和删除它可以减少! – ghedas 2011-04-27 12:09:09
你在控制器的构造/最终化方法中做了大量的数据I/O或其他事情吗?如果不是这样,实际创建/破坏类本身的开销很小。仍然不确定为什么要在Session中存储控制器。 (我假设你正在使用MVC方法?) – KTF 2011-04-28 19:31:08