Настройка проекта для модульного приложения .Net MVC

Рассмотрим проект MVC4/EF5:

  • Создание веб-приложения, которое будет состоять из 3 модулей.
  • В зависимости от лицензии клиента мы включим или отключим 1-3 модуля.
  • Каждый из модулей будет иметь дело с несколькими общими таблицами (Пользователи, Компания и т. д.).
  • Каждый из модулей будет иметь дело с таблицами, характерными для их функций (заказы на поставку, табели учета рабочего времени и т. д.).
  • Портал администратора, пользователи-администраторы в отдельной таблице от обычных пользователей.
  • данные, передаваемые в представления с использованием моделей представлений
  • в конечном итоге появится служба JSON для демонстрации частей функциональности приложений.
  • Будет несколько развертываний этого приложения с небольшой настройкой (помимо простого включения/отключения каждого из трех модулей).

План на данный момент:

  • Отдельная dll для модели
  • Отдельная dll для каждого модуля/функциональной области.
  • Отдельная dll для ViewModels
  • Отдельная dll для административного портала
  • Отдельная dll для веб-сервиса

Вопросы:

  1. Что-нибудь дает отдельная dll для ViewModels?
  2. Советы по управлению несколькими вариантами одного и того же приложения в отношении организации проекта и контроля версий?
  3. Должна ли быть отдельная dll для аутентификации (поставщики членства и ролей)?
  4. Любые другие мысли? (Извините за открытый/загруженный вопрос, возможно, мне следует удалить этот вопрос)

person sheamus    schedule 18.09.2013    source источник
comment
Вы думаете в правильном направлении. Также посмотрите на nopCommerce, они внедрили модель разработки на основе плагинов, чтобы сделать их разработку и развертывание модульными.   -  person Pradeep    schedule 18.09.2013
comment
Также стоит взглянуть на FeatureFlags, если вы размещаете приложение для них. Если вы поместите функции за ними, вы можете включить/отключить их для каждого пользователя.   -  person Matthew Steeples    schedule 18.09.2013
comment
Посмотрите на мой вопрос здесь, он охватывает некоторые проблемы stackoverflow.com/questions/10428300/   -  person GraemeMiller    schedule 19.09.2013
comment
@sheamus, что еще я могу сделать, чтобы помочь с этим вопросом?   -  person GraemeMiller    schedule 25.09.2013


Ответы (1)


Мой совет:

  • Не пытайтесь решить свои проблемы с помощью системы управления версиями. Если вы действительно хорошо разбираетесь в ветвлении/слиянии и очень дисциплинированы. Я бы порекомендовал одну кодовую базу, объединенную с Di/IoC.
  • Многое из DI/IoC. Посмотрите на Autofac и дополнительные услуги Mutli-tenancy. Сохраняйте все как можно более слабо связанными
  • Тестирование — TDD, так как все должно быть слабо связано, много тестов — посмотрите на Autofixture/AutoMoq
  • Точки расширения в изобилии - уровни перенаправления вам в помощь, поскольку всем нужны разные реализации. Наши основные архитектурные элементы — это облегченный стиль CQRS — команды, команды Валидаторы, запросы и события домена
  • Держите всех в одной и той же структуре базы данных (если вы не используете NoSQL и т. д.)
  • Используйте Onion Architecture — создайте 3 проекта, Web (MVC5/WebAPI/ ViewModels), инфраструктура (все технические вещи, реализация репозитория и т. д.), доменный уровень
  • Затем создайте проекты для каждого клиента с переопределениями - например. Пользовательский ITimeSheetCalculator и т. д.
  • Включите ViewModels в веб-проект. При необходимости просмотрите сопоставления ViewModel для каждого арендатора. Используйте AutoMapper
  • Посмотрите на такие вещи, как поставщик VirtualPathProvider EmbeddedVirtualPath, чтобы вы могли помещать представления CSS в клиентскую DLL.
  • Создайте файл конфигурации Ambient, определяющий, что включено для каждого арендатора. Потребуются переключатели функций. Особенно во время разработки функций, которые еще не завершены.
  • Найдите себе канарейку — клиента, с которым вы можете работать над бета-версией, которому вы доверяете и который может дать хорошие отзывы
  • В целях безопасности посмотрите на использование идентификации на основе утверждений - встроено в MVC5. Упрощает использование различных правил безопасности для предварительного клиента и т. д.
  • Если вы работаете с несколькими клиентами, и всем им нужны разные функции/или одна и та же функция, но реализованная по-разному, вам нужен самый сильный человек, которого вы можете найти для сбора требований. Вы не можете использовать традиционный Scrum, иметь разработчиков и т. д. и работать напрямую со всеми клиентами. Вам нужен кто-то в вашей компании, выступающий в роли владельца продукта, который возьмет на себя задачу согласования всех клиентов с общими функциями.
  • Учтите, что в Azure есть много полезных функций, которые мы использовали. Легко позволяет масштабировать вверх и вниз.

Удачи

person GraemeMiller    schedule 19.09.2013