Подтвердить что ты не робот

ASP.NET MVC 5 Модульная архитектура веб-приложений?

Компания, в которой я работаю в настоящее время, борется с архитектурным решением для нашего диапазона приложений. На данный момент у нас есть несколько приложений, которые имеют общие части (думаю, как календарь). До сих пор мы продолжали копировать код из другого существующего приложения, но в будущем мы хотим превратить наши приложения в более модульный дизайн:

Our situation

Как вы можете видеть на картинке выше, возможно иметь разные версии модулей для каждого приложения.

Мы рассматриваем возможные решения:

  • Построение базовой инфраструктуры приложения, в которой мы можем установить модулей. Мы думаем о таком инструменте, как Nuget, чтобы выполнить это.
  • Построение одного приложения, в котором все наши модули включены (= одна база кода), но клиент получает только функциональность, которая активирована для него. Мы рассматриваем некоторые проблемы с версиями здесь.

Любые предложения по этому поводу? Мы не можем быть первой компанией, которая борется с этой проблемой. Все наши приложения - это веб-приложения ASP.NET MVC 4/5, созданные с помощью шаблонов Razor или шаблонов JavaScript (knockout.js). Все наши приложения развернуты на Microsoft Azure, и у нас есть обширные знания о скриптах buildscripts (MSBuild), CI Server...

4b9b3361

Ответ 1

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

Преимущество:

  • Может поддерживать и выпускать несколько версий. Различные клиенты получают другую версию.
  • Установка последней или конкретной версии, поддерживаемой через Nuget. Это помогает во время разработки, когда разработчик App A может ориентироваться на версию 2.0 модуля A, в то время как разработчик App B может настраивать 1.0.
  • База с одним источником с отдельными ветвями для каждой версии. Клиент, использующий 1.0, запрашивает изменение, получит код из ветки 1.0 с запросом исправления.
  • Каждый модуль может быть выпущен или обновлен независимо.

Задачи:

  • Во время разработки кода отладки сборки, установленной с помощью Nuget. Nuget поддерживает его встроенный. Мы достигли этого в нашем случае (Framework используется несколькими платформами).

  • Изменения кода, необходимые для кода модуля (требуется ошибка или новая функция). Ну, это сложно:

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

Вариант 2: назначенная команда, ответственная за исправление проблемы или запроса изменения в рамочном коде.

Ответ 2

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