8

我正在开发一个 MVC 站点,这是我的公司所做的第一个,我发现自己经常做的一件事是在控制器中创建选择列表,将它们放入 viewdata 并在创建 html.DropDownList 时读取它们。有几件事让我觉得我做事的方式很臭。

  1. 某些页面可以重复列表(酒店房间的董事会费率,用户可以根据需要向酒店添加任意数量的房间),目前我使用相同的选择列表,这是一种好的做法还是应该每个人都有一个?

  2. 在前面的示例中,“房间”是一个 ascx,由 renderpartial 或通过 jquery 的 ajax 调用呈现。控制器传递选择列表以便ascx可以使用它的最佳方式是什么,目前我添加到页面的viewdata中,它将它的viewdata传递给renderpartial,但是在ajax调用上还需要添加action方法ascx 的 Viewdata 的选择列表,又不确定这是最好的方法。

  3. 我有一个存储库,它保存这个“静态”数据并作为通用列表返回,所以每次控制器需要数据时,它都会访问列表的存储库(除了董事会费率之外,还有一些其他的东西,比如人的头衔,先生,夫人等)我怀疑某种缓存会更好,因为数据很少发生变化。

有人在这些领域有什么建议吗?

4

2 回答 2

3
  1. 如果这些 SelectLists 完全相等,那么我肯定最好将一个列表用于多个 DropDownLists。

  2. 看起来像它的常见用法。我也在使用类似的方法,但是考虑将一些控件移植到 Html.RenderAction,因为通过页面的 ViewData 来控制对我来说也感觉不好。是的,我知道它不会是纯 MVC :)

  3. 如果你的 ORM 支持缓存,当然使用它。

但是,如果您的项目不小并且您认为它会继续增长,我建议在您的存储库之上实现一个服务层(PoEAA 模式),该层也将包含业务逻辑和缓存管理逻辑。

如果你想透明地管理你的缓存,而不影响你的 dal 或 mvc 层,我认为最好的方法是使用 AOP。

于 2008-12-15T14:14:13.583 回答
0

一种方法是通过类型化视图将选择列表所需的数据放入模型中。视图可以遍历模型中的数据以生成它需要的任何选择列表。您也可以将对象直接填充到 ViewData 集合中,但我认为拥有类型化视图会产生更简洁的代码。

于 2008-12-15T21:07:53.513 回答