2

我正在考虑为 ASP.NET MVC 站点实现简单的 CMS 的策略。简单的部分是我已经抽象了各种局部视图中使用的值,所有这些都是共享相同 CSS 布局的用户控件。所以我在数据库中的相同部分视图中填充自定义值,我可以偶尔使用 CRUD 修改它们。

不那么简单的部分是标准 UI 元素作为 sql 表行的合理有效和逻辑抽象。但抛开这些...

我知道我将使用一些超级模型将部分视图的预配置模型交给每个页面。但是如果它们是预配置和预加载的,那么在调用之前将它们放在哪里?

让我觉得这样做有点疯狂的部分是本质上是静态数据的加载时间。但话又说回来,SharePoint!

那么(我认为)为什么不将它全部加载到 application_start 中呢?为什么不?我回答!然后我开始使用 IoC 来做一些事情,即使是一个曾经认为这可能是一个理智的想法的聪明人,谷歌也不会返回一个指向好的信息的链接。

那么除了在构造函数中放置存储库调用之外,是否有人有更好的想法来使用 IoC 容器从数据库中填充模型?

然后,有没有人认为将这些静态数据模型放在控制器可访问的 IoC 容器中是一个愚蠢的想法?

谢谢,

S.马奇诺

4

2 回答 2

3

遵循几个 SOLID 原则,尽可能保持你的东西一心一意。对于半静态数据,首先创建一个加载此数据的存储库。这将为每个请求加载数据。它可以工作,但性能可能不太好,但现在您有了所需的实现。

您可以做的下一件事是使用缓存存储库装饰第一个存储库。这个 CachingRepository 只会从修饰的 Repository 读取一次,然后将数据保存在内存中。

因此,您尊重关注点分离。

如果将 CachingRepository 实例限定为 Singleton,它将一直存在,直到应用程序被回收,从而有效地将缓存数据保留在内存中。

于 2009-12-07T11:40:23.670 回答
1

You may want to consider using the OutputCache attribute in your design. You can decorate your action methods that will return static data with this attribute and the framework will take care of caching.

Of course, you still need to handle when to invalidate the cache.

于 2009-12-07T17:50:35.097 回答