Обработка кода нескольких сайтов ASP.NET на основе одного шаблона - PullRequest
0 голосов
/ 09 января 2019

Я использую ASP.NET MVC и должен разрабатывать и развертывать несколько веб-сайтов на основе первого веб-сайта. Существуют различия в некоторых контроллерах, некоторых представлениях, некоторых сценариях и некоторых моделях, и база данных различается на каждом веб-сайте (в основном столбцы различаются, но имена таблиц остаются неизменными). Есть ли способ справиться с такой вещью в одном проекте Visual Studio, чтобы упростить обслуживание и легко добавить общую функцию на каждый веб-сайт?

В настоящее время я копирую проект pilote в новый проект VS и изменяю все варианты. Но я считаю, что это не идеальная ситуация (из-за поддержания / улучшения).

1 Ответ

0 голосов
/ 09 января 2019

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

Прежде всего, разработка приложения с такой «многопользовательской» не имеет ничего общего с самим шаблоном MVC. Вы можете сделать это без MVC: D. Во-вторых, если веб-сайты должны работать с различными бизнес-доменами, я боюсь, что нет общего способа сделать то, что вы хотите. В моем случае это был просто ряд платформ электронной коммерции.

В любом случае, подумайте о следующих вещах.

1. Подумайте об использовании подхода поддомена, если можете. Это избавит вас от глупых маршрутов и махинаций. По сути, вы можете сопоставить *.yourdomain.com с одним приложением и легко обрабатывать необходимую логику, связанную с арендатором. Так что в моем случае это было приложение, которое вело себя по-разному, в зависимости от предоставленного URL, не маршрута, а поддомена, например, 'superclient.yourdomain.com'. Это не всегда возможно или хорошая идея, но подумайте об этом.

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

if (website1) {
    showBlockOne();
} else if (website2) {
    showBlockTwo();
} else if (website3) {
    showBlockThree();
}

тогда вы делаете что-то не так, это путь к безумию. Это должно быть что-то вроде

_currentTenantViewContext.ShowBlock();

Так что его полиморфизм над условными операторами в большинстве случаев.

3. В моем случае требовалось создать приложение, которое могло бы работать на любом языке, поэтому мне пришлось решать эту проблему и на стороне базы данных. Проблема в том, что если обычно у вас есть, например, таблица ProductType в базе данных с Id и Name, то в многопользовательском приложении это не так просто. Моим решением было создать две таблицы - ProductType с полями Id и Code и таблицу ProductTypeLocalization с полями Id, ProductTypeId, LanguageId, Value для решения этой проблемы. Также требовалось сделать эти значения редактируемыми из панели администратора ...

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

4.Для ситуаций, когда вам нужны определенные поля в таблице базы данных только для одного сайта, не рекомендуется свободно создавать их (в общем). Подумайте об использовании некоторого общего формата для этого, например, JSON или XML. Если у вас есть несколько дополнительных текстовых полей для определенного веб-сайта в некоторой таблице, просто создайте одно поле (назовите его ExtraSettings или что-то в этом роде) и сохраните эти строки как JSON в этом одном поле. Конечно, вы должны обрабатывать эти данные по-разному, но это снова связано с внедрением зависимостей. Также вы можете использовать NoSQL для этого.

5.Предоставление функций, для разных веб-сайтов требуется отображать разные блоки, применять правила и т. Д. Вы должны иметь какой-либо способ их включения / выключения для определенного веб-сайта (арендатора) без перекомпиляции / повторного развертывания.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...