1

У меня возникло архитектурное решение: Мы собираемся создать новое приложение, и мы решили, что будем использовать ASP.NET MVC и Entity Framework (вероятно, сначала база данных). В первых случаях мы создадим только веб-приложение для обычных браузеров, но в будущем мы можем добавить мобильные приложения. (SOA?)Архитектурные решения: ASP.NET MVC & Entity Framework

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

Это будет правильно?

  1. MvcProject
    • Модель
    • Просмотр
    • Контроллер
  2. DAL проект
    • Считает EDMX и T4 шаблоны

Я искал примеры, образцы и лучшие практики, но я не могу найти что-то подходящее.

Спасибо!

+0

Вы должны также отделить бизнес-логику, если вы собираетесь писать новый внешний интерфейс на каком-то этапе –

+0

Действительно , в этом есть смысл. Не могли бы вы привести пример? – bjornruysen

+0

Это больше о структуре решений и технологиях в вашем вопросе, а затем о архитектуре. –

ответ

9

Как я обычно структурировать свои решения (редактировать адаптированный для NuGet)

  1. WebSite (MVC)
    • Контроллеры
    • Просмотров
    • Content (скрипты, CSS, изображения, и т.д. ,)
  2. Презентация Модели (для простых, проектов это будет встроен в веб-сайт)
    • Просмотр моделей
    • Модель картостроители
  3. Бизнес Логика
    • Правила
    • Местные расширения (веб и общие)
  4. данных (если комплекс, использовать отдельную папку на контекст/хранилищу/модели)
    • Хранилища
    • Entity Модели
    • контекста данных и конфигурации
  5. Web Library (возможно, как отдельное решение, доступное через местный NuGet)
    • Расширения (до классов MVC/Web)
    • Вспомогательные классы = Атрибуты
  6. Общей библиотека (возможно, в виде отдельных решений, доступной через локальный NuGet)
    • Расширение
    • Helper Классы

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

Для мобильных устройств, если вы собираетесь через Интернет, я бы построил их непосредственно в WebSite, используя jQuery Mobile и мобильные системы просмотра. Если вы думаете, что родной, то я бы добавил уровень WebAPI, который может или не может использовать одни и те же модели представления, как веб-сайт для доставки API, и разрабатывать мобильное приложение вне этой структуры против API. Скорее всего, API имеет свои собственные модели и сидит над бизнес-слоем в отдельном стеке. В моем текущем проекте мы имеем данные в отдельном решении и разрабатываем API и веб-сайт в отдельных решениях, совместно используем модели через пакеты NuGet.

+0

Структура вашего решения выглядит аккуратно, но я не мог понять некоторые из указанных типов папок. Например. Сепарация модели WebSite и Presentation, просмотр модели и ее интеграция. Не могли бы вы указать на какую-либо статью или проект, объясняющий демонстрацию этих понятий? – BigBoss

+0

@BigBoss Я не писал статей, описывающих это. Это мои личные предпочтения, и, честно говоря, это своего рода «максимальная» организация. Если бы они не были разделены с отдельным проектом API, я бы, вероятно, включил модели представления в проект веб-сайта (приложения). «Общая» библиотека может фактически быть ее собственным решением и импортироваться как пакет NuGet. – tvanfosson

0

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

MvcProject 
Model 
View 
Controller 

DAL project 
Holds edmx and T4 templates 
2

Это не звучит, как ваша команда имеет достаточно информации, чтобы сделать решение еще. Я знаю, поэтому вы задаете этот вопрос здесь, но вы не должны полагаться на какой-либо ответ. ASP.NET MVC и EF может будет отличным решением для вас, но вы не должны выбирать его, по крайней мере, проработав через Nerd Dinner или Music Store учебники.

После того, как вы это сделаете, вы сможете ответить на свой вопрос о архитектуре и, вероятно, также найдете некоторые дополнительные вопросы.

+0

Вы делаете здесь абсолютную точку. Спасибо! – bjornruysen

+0

Добро пожаловать. Удачи и получайте удовольствие, создавая новое приложение. –

1

Базовая стратегия может содержать следующие:

  • Project Data
    • EF Модель
    • Entites/T4 поколений
  • Logic Project
    • правила Применение
    • Логика не относящиеся к представлению данных
  • Проект сайта
    • Презентация/агрегация логики (в контроллерах/просмотров)
    • Просмотров
    • скрипты/активы
    • Модели (для связи между контроллер и только просмотр)
  • Мобильный проект
    • же материал, как сайт, но для подвижной цели
0

Помните, что лучшая архитектура напрямую связан с бюджетом и сроками.

MVC будет стоить дороже, чем обычные asp.net:

  • MVC вынуждает разработчиков использовать 3 уровней во все времена
  • разработчики MVC являются более дорогими и труднее получить

I Предположим, вы имеете в виду обычный asp.net, когда вы говорите проект DAL. Если это так, то:

  • разработка ASP.NET быстрее, чем MVC
  • ASP.NET веб-сайты позволят вам использовать более сложные сетки сторонних и т.д.
  • Широко доступен талант в USA

В отношении разработки мобильных устройств не имеет значения, что вы выберете для веб-сайта. Ваши мобильные приложения должны быть разработаны на родном языке устройства (IOS, Android и т. Д.). Затем вы связываетесь с приложением через SSL и JSON.

1

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

  • Создайте отдельные виды/контроллеры для своих мобильных страниц. Это решение является самым дорогим, но также и самым гибким. (посмотрите на мобильную поддержку в MVC 4)
  • Создайте отзывчивый макет для своего сайта (http://jquerymobile.com/) Обычно я предпочитаю эту опцию.

Обычно я использую 3 проекта

  • DAL
    • Содержит EDMX, шаблоны T4
  • Сервис
    • классов обслуживания с CRUD операций (я не используя репозитории, потому что они переполнены)
    • Просмотр моделей
  • Web
    • Контроллеры, Views, ...