ASP.Net MVC и N-уровень

Привет,

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

Зачем использовать ASP.Net MVC, если вы уже используете многоуровневую архитектуру (уровень данных, логический уровень, уровень представления)? Кроме того факта, что контроллер имеет большую мощность, чем логический уровень.

Прав ли я, думая, что могу использовать nHibernate и все мои классы доступа к данным, сущности и сопоставления в части модели MVC?

При использовании контроллеров лучше всего выделить большую часть логики в отдельный класс, чтобы я мог вызывать ее из нескольких контроллеров? Или я могу вызывать их из самих контроллеров, учитывая тот факт, что я бы не хотел, чтобы все они были Actions, просто обычные методы.

Спасибо




Ответы (5)


MVC не заменяет N-Tier, это способ организации уровня представления.

Я бы не сказал, что контроллер мощнее логического слоя. Вместо этого контроллер (как часть уровня представления) должен по-прежнему вызывать логический уровень.

Контроллеры должны только подготавливать данные для представлений и обрабатывать действия из представлений. Вы все еще должны использовать свой BLL.

person gius    schedule 04.01.2009

Да, сущности NHibernate можно (и нужно) передавать в представления.

Этим вы навлечете на себя некоторые неприятности. Вы должны использовать сглаженные, нулевые безопасные DTO, также известные как модели представлений.

person Matt Hinze    schedule 04.01.2009
comment
...моя ошибка. Я имел в виду сущности POCO (в качестве носителя данных), а не сущности NHibernate. - person gius; 04.01.2009
comment
Эм, сущности NHibernate могут и должны быть POCO. - person Anthony; 04.01.2009
comment
Но вы можете использовать их для редактирования базы данных (сохранение, удаление и т. д.) из представления, что не очень хорошо. - Или упомянутая беда где-то еще? - person gius; 04.01.2009
comment
Непосредственная проблема в основном связана с нулевой безопасностью и иногда с проблемами, связанными с ORM, такими как SELECT N+1. Есть и другие проблемы, связанные с безопасностью, тестированием и целостностью данных, которые заставляют некоторых архитекторов избегать использования модели предметной области в качестве M в MVC и вместо этого использовать модель представления. - person Matt Hinze; 05.01.2009

Дэмиен, вы можете прочитать эти 2 поста:

Толстый инспектор

Архитектурный взгляд на ASP.NET MVC Framework

person rodbv    schedule 04.01.2009

N-уровень — это архитектурный шаблон, обеспечивающий повторное использование, разделение проблем и масштабируемость ключевых областей вашего приложения. Слои, не относящиеся к пользовательскому интерфейсу (бизнес, данные, фасад и т. д.), должны быть протестированы модульно и не зависеть от пользовательского интерфейса.

Уровень пользовательского интерфейса — это всего лишь один из этих слоев, будь то Silverlight, ASP.NET MVC, веб-формы и т. д.

MVC, как и MVP, представляет собой шаблон проектирования, который обеспечивает лучшую тестируемость слоя пользовательского интерфейса. ASP.Net MVC — это готовый фреймворк, который поддерживает и реализует этот шаблон. Этот шаблон использовался задолго до появления этой структуры.

Но это просто выбор слоя пользовательского интерфейса. В контроллерах не должно быть взаимодействия с базами данных, службами и т. д., они контролируют состояние представления с помощью модели, не должны контролировать бизнес-логику, постоянство, транзакции и т. д.

person En.    schedule 29.03.2010

Чтобы ответить на ваш вопрос о том, зачем использовать, если вы уже переходите на многоуровневую систему, нужно сказать, что это делает URL-адреса более организованными и удобными для поисковых систем. Кроме того, это более стандартный шаблон, чем другие шаблоны в ASP.Net. Это делает его более удобным для разработчиков для тех, кто уже использует MVC на других платформах.

person Turnkey    schedule 04.01.2009