Разработка приложения ASP.net MVC для использования репозиториев и сервисов - PullRequest
3 голосов
/ 23 марта 2010

Я недавно начал читать о ASP.net MVC и, взволнованный этой концепцией, я начал переносить весь свой проект веб-формы на MVC, но мне трудно поддерживать мой контроллер в тонком состоянии даже после того, как я следовал всем хорошим советам. (или, может быть, я просто не понимаю ...). Веб-сайт, с которым я имею дело, имеет Статьи, Видео, Цитаты ... и у каждого из этих объектов есть категории, комментарии, изображения, которые могут быть связаны с ним. Я использую Linq для sql для операций с базой данных, и для каждого из этих объектов у меня есть репозиторий, и для каждого репозитория я создаю службу, которая будет использоваться в контроллере.

так что у меня есть -

  • ArticleRepository
  • ArticleCategoryRepository
  • ArticleCommentRepository

и соответствующий сервис

  • ArticleService
  • ArticleCategoryService ...

Вы видите картинку.

У меня проблема в том, что у меня есть один контроллер для статьи, категории и комментария, потому что я думал, что иметь ArticleController для обработки всего этого может иметь смысл, но теперь мне нужно передать все службы, необходимые для конструктора Controller. Поэтому я хотел бы знать, что я делаю неправильно. Мои услуги не разработаны должным образом? я должен создать сервис Bigger для инкапсуляции небольших сервисов и использовать их в моем контроллере? или у меня должен быть контроллер articleCategory и контроллер articleComment?

Страница, просмотренная пользователем, состоит из всего этого, статьи, которую нужно просмотреть, связанных с ней комментариев, списка категорий, к которым это относится ... как я могу эффективно разбить контроллер, чтобы сохранить это "тощий" и решить мою головную боль?

Спасибо! Надеюсь, мой вопрос не слишком длинный для прочтения ...

Ответы [ 2 ]

7 голосов
/ 23 марта 2010

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

Лично я предпочитаю размещать больше логики моего домена в реальных сущностях домена (например, article.AddComment (комментарий), а не articleCommentService.AddComment (article, comment)), но ваш подход также вполне подходит.

2 голосов
/ 23 марта 2010

Я думаю, вы движетесь в правильном направлении. Вопрос в том, как создать экземпляр ваших услуг? Я не гуру MVC.NET, но сделал много сервис-ориентированных Java-проектов и именно тот шаблон, который вы обсуждаете.

На земле Java мы обычно используем Spring для внедрения одноэлементных бинов.

1) Вы можете сделать то же самое в .NET, используя платформы внедрения зависимостей.

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

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

4) Вы даже можете создать простую глобальную фабрику обслуживания, к которой имеют доступ все контроллеры, которая может быть просто классом синглетонов.

Также выполните поиск в Google для внедрения зависимостей .NET.

...