Разделение проблем и производительности?

У меня есть сайт ASP.NET MVC, и я пытаюсь понять разделение контроллера а также модель (репозиторий) и вспомогательные функции HTML.

Цель состоит в том, чтобы запросить таблицу базы данных с информацией о фотоальбомах и отобразить ее сгруппированные по годам.

Шаги следующие:

  1. Запросить базу данных и вернуть данные из базы данных.
  2. Преобразовать Datatable в AlbumCollection (список)
  3. Ведро альбомов по годам в ALbumDictionary
  4. Рендеринг каждый год в отдельной таблице HTML.

Учитывая этот запрос, я мог видеть: 1,2,3 все в модели, а контроллер просто привязывает View к модели AlbumDictionary или 1,2 в модели и привязывается к AlbumCollection и 3 в HTML ViewHelper или 1,2 в модели 3 в контроллере и привязать к Albumdictionary

Мысли?

Выполнение каждого преобразования в первом цикле будет иметь наилучшую производительность, но я не уверен, что это лучшее разделение проблем.

В частности, в отношении вышеупомянутого вопроса была бы интересна общая обратная связь: когда разделение проблем преобладает над производительностью или наоборот?


person leora    schedule 30.08.2009    source источник
comment
что ты используешь? linq для sql, nhibernate, entity framework ...?   -  person giorgian    schedule 30.08.2009
comment
на самом деле это не так, я просто пытался понять, насколько сложной будет операция ...   -  person giorgian    schedule 30.08.2009


Ответы (3)


Я бы постарался уберечь Модель от всего, что связано с рендерингом.

Я вижу группировку по годам, довольно близкую к рендерингу. Вот почему я бы не поместил его в модель, а также не в контроллер. Обычный подход - иметь модель Poco и DAL / BLL и другую модель под названием ViewModel (модель, используемая строго типизированным представлением). Это хорошее место для подготовки объектов к рендерингу.

В ViewModel я бы использовал Linq для группировки альбомов по годам. Надеюсь, это будет достаточно быстро.

person Mathias F    schedule 30.08.2009

Я был пользователем какого-то поистине ужасного программного обеспечения, которое, я уверен, выглядело хорошо с объектно-ориентированной точки зрения для дизайнеров и, возможно, было даже легко поддерживать, я хочу отметить, что пользователи практически упадут в сторону производительности. каждый раз.

Если разница в производительности незначительна, следуйте разделению проблем, если нет, сделайте все возможное, чтобы добиться максимальной производительности. Нам нужно перестать так сильно беспокоиться о лишних нескольких минутах, которые необходимо поддерживать (возможно, прикасаясь к этому коду раз в год, когда он находится в разработке), и больше о медлительности для всех пользователей каждый день. Нам нравится говорить, что время разработки настолько дорогое, что нам нужно его минимизировать, но правда в том, что время разработки часто намного дешевле, чем количество времени, которое мы просим наших пользователей тратить ежедневно.

person HLGEM    schedule 12.10.2009

Я бы сделал ведение в контроллере, только если:

  • группирование происходит только один раз, и я могу сделать это с помощью одного или двух простых операторов;

  • Это происходит более одного раза, но я могу сделать это с помощью оператора AlbumDictionary.BucketByYear().

В противном случае я бы использовал для этого модели.

person giorgian    schedule 30.08.2009