Предложения по структуре приложения ASP.NET MVC - PullRequest
3 голосов
/ 08 января 2010

Я Java-разработчик, делающий переход в мир C #. Я получил довольно хорошее представление о ASP.NET MVC (и могу сравнить / сопоставить его с концепциями, которые я изучил для Struts).

Однако я ищу совет о том, как структурировать мой проект. В настоящее время у меня есть два решения в проекте: веб-приложение MVC и раздел ClassLibrary.

Приложение использует многоуровневую архитектуру: контроллеры / службы / DAO. Чтобы все работало "правильно", у меня есть классы Controller и Model в решении MVC, а также Services, DAO и Security в решении ClassLibrary. К сожалению, это вызывает всевозможные незначительные проблемы (например: расширение объекта UserAccount из Entity Framework на стороне ClassLibrary неоднозначно, когда я пытаюсь расширить его на стороне MVC для проверки формы).

Единственное решение, которое я могу придумать, это поместить ВСЕ в проект MVC и организовать то, что в настоящее время находится в ClassLibrary, в папке App_Code. Это решило бы некоторые проблемы, но мне кажется, что это «неправильно»; мои проекты Java разделили код в каталог src и просмотрели (jsp) в каталоге webapp.

Что думают некоторые из более опытных разработчиков .NET?

Ответы [ 2 ]

3 голосов
/ 08 января 2010

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

Кроме того, имейте в виду, что .NET не допускает циклические ссылки между объектами в двух разных сборках (что обычно переводит один в один с проектами).

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

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

Контроллеры и представления обычно должны входить в веб-проект напрямую.

В общем, мой совет - разбивать вещи на отдельные проекты ТОЛЬКО тогда, когда у вас есть реальная «потребность» в этом. Но сборки и проекты НЕ являются хорошим способом представления слоев или уровней в большинстве приложений. Это логические концепции, которые не всегда хорошо соответствуют физической структуре проекта.

Если вы хорошо спроектировали свои классы и избежали тесной связи, вы можете обычно перемещать код в библиотеки классов позже, если возникнет реальная необходимость.

0 голосов
/ 08 января 2010

Что вы подразумеваете под «правильной» работой? Я считаю, что большинство проблем можно устранить, просто включив пространство имен в раздел импорта пространства имен web.config. Когда вы это делаете, ваши модели из другой сборки автоматически разрешаются и отображаются в диалоговых окнах MVC и в intellisense при кодировании представлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...