ASP.NET MVC (Доменная модель, Репозиторий, Свободно, Услуги - Структура для моего проекта) - PullRequest
4 голосов
/ 29 августа 2009

В моем веб-приложении ASP.NET MVC у меня есть:

  • Модель предметной области, созданная LINQ to SQL

  • Хранилища, такие как

    UserRepository и OrderRepository

  • IQueryable Fluents как методы расширения IQueryable, такие как

    public IQueryable<Order> GetNewOrders(this IQueryable<Order>)

  • Такие услуги, как

    UserService и OrderService

  • Классы утилит и методы расширения, такие как

    CryptoUtility (хеширование и т. Д.) И String и т. Д.

  • ViewModels, которые являются особенными для каждого MVC View

  • Сам проект ASP.NET MVC (контроллеры, представления)

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

Один совет: в настоящее время репозиторий, службы, IQueryable Fluents и т. Д. Работают напрямую против реализации модели предметной области, у меня нет определения интерфейса для них. Я посчитал это ненужным, но, возможно, это необходимо для слабой связи? Мои сервисы имеют интерфейс (например, IOrderService), а мои репозитории реализуют IRepository .

Оцените ваш вклад в организацию этого в сжатой манере, и особенно, какой слой должен зависеть от того, какая организация сборки. Спасибо!

Ответы [ 3 ]

8 голосов
/ 03 сентября 2009

Я бы посмотрел статью Джеффри Палермо об луковой архитектуре здесь . Эта базовая архитектура хорошо работает в любом проекте и позволит вам отделить основной проект (уровень домена, постоянство и т. Д.) От веб-проекта.

Мы используем это с MVC / StructureMap / FluentNHibernate и добились большого успеха.

В итоге мы имеем структуру, аналогичную приведенной ниже.

> trunk
  + build (build scripts)
  + lib (external libraries)
  > src (source code)    
   >> Organization.App (solution name)
     >> Organization.App.Core (code library)
        + Config
        > Domain
          > Model
          > Persistence
          > Queries
          > Services
        > Persistence
        > Services
     >> Organization.App.Web (mvc web app)
        > Assets
          + Images
          + Scripts
          + Stylesheets
        + Controllers
        + Views
        + ViewModels

Это основная идея. Веб-приложение ссылается на основное приложение для доменных сущностей нашего репозитория / единицы работы. Проверьте этот старый проект в коде Google для аналогичного примера. Самое замечательное в этом то, что мы смогли добавить новые типы проектов «UI» в то же решение и повторно использовать наш основной проект, как и предполагалось. Как консольное приложение или второе веб-приложение, или все, что вам нужно.

3 голосов
/ 29 августа 2009

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

0 голосов
/ 29 августа 2009

Возможно, вы захотите проверить архитектуру s # arp , чтобы увидеть, как они структурируют вещи. Он использует NHibernate, и их репозитории напрямую связаны с ними, поэтому вам нужно будет его изменить.

...