关注点与性能的分离?

时间:2009-08-30 12:08:14

标签: asp.net-mvc separation-of-concerns

我有一个ASP.NET MVC网站,我正在尝试找出控制器和模型(存储库)以及HTML帮助程序功能的分离。

目标是查询相册信息的数据库表,并按年分组显示。

步骤如下:

  1. 查询数据库并返回数据库信息的数据表。
  2. 将数据表转换为AlbumCollection(列表)
  3. 按年份将专辑暂存到ALbumDictionary
  4. 每年在单独的HTML表格中呈现。
  5. 根据这个要求,我可以看到: 1,2,3全部在模型中,控制器只是将View绑定到AlbumDictionary模型 要么 模型中的1,2并绑定到AlbumCollection和HTML ViewHelper中的3 要么 1,2在控制器的模型3中并绑定到Albumdictionary

    思想?

    在第一个循环中进行每次转换都会获得最佳性能,但我不确定它是最佳关注点。

    特别是对于上述问题,通用反馈会很有趣:关注点分离何时会超出性能或反之亦然?

3 个答案:

答案 0 :(得分:2)

作为一个真正可怕的软件的用户,我确信从面向对象的角度来看对设计师来说很好看,甚至可能很容易维护,我想指出用户会站在一边几乎每次都有表现。

如果性能差异可以忽略不计,请遵循关注点分离,如果不是,请尽一切努力获得最佳性能。我们需要不再担心可能维持的额外几分钟(可能每年一次触摸该代码)以及更多关于每天所有用户的缓慢问题。我们喜欢说开发时间非常昂贵,我们需要将其最小化,但事实是开发时间通常比我们要求用户每天浪费的时间要便宜得多。

答案 1 :(得分:1)

我会尽量避免模型与渲染有关。

我看到按年分组非常接近渲染。这就是为什么我不把它放入模型而不是控制器。一个常见的方法是使用一个Poco和DAL / BLL模型以及一个名为ViewModel的模型(强类型视图使用的模型)。这是准备渲染对象的好地方。

在ViewModel中,我会使用Linq按年份对相册进行分组。希望这足够快。

答案 2 :(得分:0)

只有在以下情况下我才会在控制器中进行分组:

  • 分段只发生一次,我可以使用一个或两个简单语句来实现;

  • 它不止一次发生,但我只用AlbumDictionary.BucketByYear()声明即可。

否则我会使用模型来做到这一点。