Рефакторинг нескольких экземпляров программного обеспечения для электронной коммерции в единую базу кода - PullRequest
2 голосов
/ 07 июля 2010

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

Мы размещаем сотни экземпляров нашего собственного классического приложения для электронной коммерции на основе ASP, и из-за бесчисленных настроек со стороны клиентов и самих себя управление версиями является кошмарным, пользовательский код не может быть управляем, и мы отказались от выпуска новых функций и массовое развертывание исправлений ошибок из-за невозможности отслеживать, кому и какие патчи нужны.

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

Что бы я действительно хотел сделать, так это использовать минимально возможное усилие, перенести код приложения (а не базу данных) в единую базу кода. У меня есть вопросы:

  • Может ли ASP относительно эффективно обрабатывать подключение к различным базам данных в зависимости от вызываемого заголовка хоста? Я планирую некоторые базовые расширения для рутины, получить hostheader ищите учетные данные БД в metadb, установите логическую строку подключения приложения.

  • Приложение записывает несколько файлов на веб-сервер из базы данных для целей кэширования. Я хотел бы справиться с этим, эмулируя это поведение, записав его в нечто вроде /masterapp/customer1/specificfile.htm и затем изменив ссылки на /specificfile.htm в коде больше похожи на / masterapp / название магазина / specificfile.htm. Очевидно, что подпрограммы, которые пишут specificfile.htm, будут записывать в новое местоположение соответственно. Это кажется разумным?

  • Другое связанное с веб-сервером хранилище, например изображения и CSV-файлы, которые мне нужно продолжать работать без идеального изменения URL-адресов, может ли ASP использовать логику для перенаправления запросов на получение /images/example.jpg в / masterapp / название магазина / images / example.jpg или /shopname/images/example.jpg опять зависит от заголовка узла? Или это можно сделать через isapirewrite? (который мы уже используем)

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

1 Ответ

0 голосов
/ 21 января 2011

Это должно быть возможным, и я достиг аналогичных результатов с кодом, разработанным таким образом с самого начала.Поскольку вы модифицируете это, это будет намного сложнее, но это отдельно от вашего реального вопроса.

Чтобы ответить на ваши фактические баллы:

  • Предположительно, ваше соединение с БДстрока уже находится в переменной приложения или в файле настроек?Если это так, вам просто нужна некоторая логика в вашем global.asa Session_OnStart, которая читает заголовок хоста и выбирает соответствующую строку БД.Это может быть жестко запрограммировано, или у вас может быть «управляющая» БД, которая хранит сайты, их пути к файлам строк БД и т. Д. И извлекает детали в объект сеанса.

  • Это связано свыше, извлеките места хранения кеша из БД или используйте базовое имя для каталога, подходящее для имени каталога, чтобы вы могли иметь "/masterapp/" & Session("strSiteBaseName") & "/cache/somefile.htm"

  • Если вы используете IIS7тогда вы можете использовать модуль перезаписи URL, чтобы справиться с этим, если вы работаете на IIS6, есть сторонние инструменты, которые вы можете сделать для перезаписи URL.Я снова сделал это, так что могу поручиться за это.Если вы хотите стать действительно умным, вы можете попросить ваше главное приложение создать файлы перезаписи для вас и «коснуться» файла web.config, чтобы загрузить их в IIS.

Одна «ошибка»вы будете иметь с заголовками хоста, не забывайте обрабатывать записи www и no-www!

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

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