Member 8741848 Ответов: 3

Хотите правильно использовать шаблон MVC


Я кодирую уже несколько лет и часто получаю очень занятые контроллеры и несколько статических вспомогательных методов. Код стабилен и прекрасно работает, но может быть очень болезненным, чтобы вернуться к нему через несколько месяцев и обновить. И я не могу не думать, что борюсь с MVC, а не использую его в полной мере.

Я ищу хорошо написанный небольшой проект c# MVC с открытым исходным кодом, который я могу скачать и изучить. В идеале тот, который имеет модульное тестирование и использует Entity Framework.

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

Что я уже пробовал:

Глядя на nopCommerce, но она очень велика.

3 Ответов

Рейтинг:
1

Dave Kreskowiak

Это также звучит так, как будто вы написали один монолитный контроллер, обрабатывающий все. Реорганизуйте контроллер в несколько контроллеров, обрабатывающих определенную тему, например логин, домашнюю страницу ...


Member 8741848

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

#realJSOP

Это вопрос личного организационного стиля. Помните, что "лучшая практика" - это не жесткое правило, а просто руководство.

Рейтинг:
0

Richard MacCutchan

Попробуйте раздел статей здесь, на CodeProject, или используйте Google, чтобы сделать более широкий поиск.


Member 8741848

Есть ли у вас один (или несколько), который вы можете порекомендовать? Я ввязался в эту "проблему", следуя плохим/простым примерам.

Рейтинг:
0

#realJSOP

Вы можете разбить свой код контроллера на несколько файлов (вы должны сделать свой контроллер частичным классом). Я делаю это, если контроллеры "заняты". Это помогает держать вещи разделенными немного больше, и вы избегаете необходимости прокручивать прошлые методы, которые не применимы к тому, что вы делаете. Обычно я помещаю не украшенные действия в основной файл (вещи, у которых нет пары get/post), а действия, у которых есть get/post, получают свой собственный файл.

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

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


F-ES Sitecore

Если ваши контроллеры "заняты", то вместо того, чтобы злоупотреблять частичными классами, вы всегда можете просто переместить бизнес-логику в модели, где она должна быть :)

#realJSOP

Это не всегда относится к моделям (например, загрузка файлов). Это просто организационная схема, поскольку большую часть времени я просто обновляю модель в своих пост-заявлениях. "Занят" также означает умеренно сложные перенаправления, основанные на данных, предоставленных Пользователем, или на том, какая кнопка вызывает метод post. Так что, как вы видите, это не так просто, как вы предполагаете.

Member 8741848

У меня было несколько таких, где контроллер полон работы с различными кнопками, даже если логика каждого из них довольно проста. Это те вещи, которые я хотел бы видеть в проекте с открытым исходным кодом или книге, чтобы увидеть, как я должен был справиться с этим.

#realJSOP

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

#realJSOP

Как использование особенностей фреймворка считается "злоупотреблением"?

F-ES Sitecore

Частичные классы обычно используются для автоматически генерируемого кода, чтобы вы могли расширить его без переопределения ваших изменений при следующем запуске автогенерации. Entity Framework и веб-формы используют это для кода, который они генерируют.

#realJSOP

У меня нет никакого автоматически сгенерированного кода, кроме файлов шаблонов, которые VS генерирует при создании нового класса пользовательского интерфейса. Я не считаю использование частичных файлов плохим способом организации больших классов.

F-ES Sitecore

> У меня нет никакого автоматически сгенерированного кода

Именно так :)

Member 8741848

Из того, что я читаю здесь: https://softwareengineering.stackexchange.com/questions/135724/separating-data-access-in-asp-net-mvc было бы лучше иметь бизнес-сервис, занимающийся логикой контроллера. Это то, что вы делаете со своими неполными классами?

#realJSOP

Нет. Это просто организационная схема кода и способ ускорить поиск того, что я хочу в коде.

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

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

Member 8741848

очень хорошая точка зрения на файлы cshtml, я даже не начал смотреть на их улучшение.