6

我正在使用 VMC 创建一个站点,并使用 bean 将数据从模型传输到控制器/视图。

我计划实现一些基本且非常简单的缓存,如果 bean 没有更改,它们会将它们存储在一个简单的结构中(随着使用量的增长,我们将在 1.3 版左右实现一个更好的缓存系统)。

所以问题在于我们的 bean 中有什么。

一种类型的 bean 只保存基本数据,并依赖一些外部服务来完成其余的工作(联系 DAO 以获取查询,解析查询以加载 bean 值)。这是我同事反复告诉我的“贫血豆”模型:-)。

另一种类型的 bean 会更加独立。它会知道 DAO 在哪里,因此会直接调用 DAO 来获取数据查询。它将包含解析查询和设置属性的必要函数。它基本上将大部分“服务”层与 bean 结合起来,将直接数据库留在 DAO 层中。

当然,对于控制器/视图,两个 bean 的外观和行为都相同。

但问题是内存以及 ColdFusion/Java 如何处理它。

使用贫血模型,bean 将有足够的内存来保存属性变量,只需轻轻一点,让它在需要时指向服务。

第二种bean的功能比较重,会不会占用缓存更多的内存???bean 的每个副本都会有方法的完整副本吗?

我倾向于认为第二个模型不会有更多的内存,因为它们会“共享”方法并且只需要属性变量的内存。

恕我直言,第二种方法将简化代码库,因为 bean 需要的代码更接近 bean,而不是分散在 DAO 和服务之间。并且它会减少服务中的简单函数,这些函数仅传递对 bean 的 DAO 的调用,可以在需要时直接转到 DAO...

这个问题有意义吗??或者至少我是怎么问的?

4

2 回答 2

4

所有内存管理都在 Java 级别进行,因此遵循相同的规则。在 Java 中,创建对象实例时分配的唯一“新”内存是为其成员变量分配的;组件/类本身的方法没有内存占用:这些东西只存储在内存中一次,并带有对它的引用。

一个可能的考虑是 CFC 的每个方法都编译为它自己的离散类(为什么?我不知道),所以每个方法都是它自己的类。与 Java 类的使用相比,这可能意味着 CFC 使用的内存占用略大,但这仍然不会随着对象实例化而扩展:对象的每个实例仍然只会为其成员变量消耗内存,而不是方法定义对象的 CFC。

于 2012-12-31T10:22:39.230 回答
0

默认情况下,所有 cfm 页面都编译到内存中,CFC 需要隐式存储在内存中(例如应用程序范围)以避免每次都实例化它,但是您这样做需要相同组件的相同内存,任何其他用途将取决于您在组件或 bean 中存储的任何数据。你看过冷泉吗?

于 2012-12-31T02:06:16.220 回答