Asp.net mvc 关注点与性能的分离?

Asp.net mvc 关注点与性能的分离?,asp.net-mvc,separation-of-concerns,Asp.net Mvc,Separation Of Concerns,我有一个网站,我正试图找出控制器和模型(存储库)以及HTML助手功能的分离 目标是查询相册信息的数据库表,并按年份分组显示 这些步骤是: 查询数据库并返回数据库信息的datatable 将Datatable转换为AlbumCollection(列表) 按年度将相册存储到相册字典中 每年在一个单独的HTML表中呈现 鉴于这一要求,我可以看到: 1,2,3都在模型中,控制器只是将视图绑定到模型 或 1,2在模型中,并绑定到AlbumCollection,3在HTML ViewHelper中 或 1,

我有一个网站,我正试图找出控制器和模型(存储库)以及HTML助手功能的分离

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

这些步骤是:

  • 查询数据库并返回数据库信息的datatable
  • 将Datatable转换为AlbumCollection(列表)
  • 按年度将相册存储到相册字典中
  • 每年在一个单独的HTML表中呈现
  • 鉴于这一要求,我可以看到: 1,2,3都在模型中,控制器只是将视图绑定到模型 或 1,2在模型中,并绑定到AlbumCollection,3在HTML ViewHelper中 或 1,2在控制器中的模型3中,并绑定到Albumdictionary

    想法

    在第一个循环中进行每一次转换都会有最好的性能,但我不确定这是否是最好的关注点分离


    特别是对于上述问题,一般反馈会很有趣:什么时候关注点分离会否决性能,或者反之亦然?

    我只会在以下任一情况下在控制器中进行扣压:

    • bucketing只发生一次,我可以用一两个简单的语句来实现

    • 它不止一次出现,但我只需要一个
      AlbumDictionary.BucketByYear()
      语句就可以做到这一点


    否则,我会使用模型来实现这一点。

    我只会在以下情况之一的情况下在控制器中进行扣合:

    • bucketing只发生一次,我可以用一两个简单的语句来实现

    • 它不止一次出现,但我只需要一个
      AlbumDictionary.BucketByYear()
      语句就可以做到这一点


    否则,我会使用模型来实现这一点。

    我会尽量让模型远离任何与渲染有关的内容

    我认为按年份分组非常接近渲染。这就是为什么我不会把它放进模型里,也不会放进控制器里。一种常见的方法是使用Poco和DAL/BLL模型以及另一个称为ViewModel的模型(强类型视图使用的模型)。这是准备渲染对象的好地方


    在ViewModel中,我将使用Linq按年份对专辑进行分组。希望这足够快。

    我会尽量让模型远离任何与渲染有关的东西

    我认为按年份分组非常接近渲染。这就是为什么我不会把它放进模型里,也不会放进控制器里。一种常见的方法是使用Poco和DAL/BLL模型以及另一个称为ViewModel的模型(强类型视图使用的模型)。这是准备渲染对象的好地方


    在ViewModel中,我将使用Linq按年份对专辑进行分组。这将有望足够快。

    作为一些真正可怕软件的用户,我确信从面向对象的角度来看,这些软件看起来不错,甚至可能很容易维护。我想指出,用户几乎每次都会在性能方面感到失望


    如果性能差异可以忽略不计,则遵循关注点分离,如果不可以忽略不计,则尽可能获得最佳性能。我们需要停止担心可能需要额外的几分钟来维护(可能一年一次在prod中触摸代码),更多的是担心所有用户每天的速度慢。我们喜欢说开发时间非常昂贵,我们需要将其最小化,但事实是,开发时间通常比我们要求用户每天浪费的时间要便宜得多

    作为一个真正可怕软件的用户,我确信从面向对象的角度来看,这些软件看起来很不错,甚至很容易维护,我想指出,用户几乎每次都会在性能方面有所下降


    如果性能差异可以忽略不计,则遵循关注点分离,如果不可以忽略不计,则尽可能获得最佳性能。我们需要停止担心可能需要额外的几分钟来维护(可能一年一次在prod中触摸代码),更多的是担心所有用户每天的速度慢。我们喜欢说开发时间非常昂贵,我们需要将其最小化,但事实是,开发时间通常比我们要求用户每天浪费的时间要便宜得多

    你在用什么?linq到sql,nhibernate,实体框架…?事实上,我只是想弄清楚这个操作有多复杂…你在用什么?linq到sql,nhibernate,实体框架…?事实上,我只是想弄清楚这个操作有多复杂。。。