Я использую Java, Spring и OO для конфигурирования & расширяемость. Обычно приложения имеют таблицы «config» со свойствами, но необходимость в конфигурируемости обычно выходит за рамки тех свойств, которые легко конфигурировать.
Это действительно домен, где языки программирования OO, полный контроль над контейнером и мощные фреймворки, такие как Spring, для встраивания конфигурации/зависимостей & Hibernate для сопоставления ORM - приходят в свои руки.
Вы можете «попробовать» сделать все это на PHP, но с более чем 20-летним опытом работы на всех языках - и без неуважения - для серьезного продукта вам может потребоваться перейти к серьезному языку.
Относительно того, что вы на самом деле нужно сделать:
таблица конфигурации & админ интерфейс для него. Это, по сути, ключевые свойства, которые ваше приложение будет использовать, а не константы, где необходима изменчивость. Кэширование это важно для производительности, поэтому здесь важно контролировать webapp на уровне сервера.
Стратегия. Алгоритмы, такие как расчет налога, построение счета или сопряжение с внешними системами, реализуются как стратегии, которые могут быть подключены к &. https://en.wikipedia.org/wiki/Strategy_pattern
Конфигурация фасоли фаза/зависимость от зависимостей. Для развертывания конфигурации &. Этот слой выбирает, создает & настраивает ваши стратегии, позволяющие вам выбрать &, параметризовать соответствующие алгоритмы для ваших требований клиентов. Это модульность жизни, которая позволяет вам делиться большинством кодовых баз между клиентами, но вставлять здесь необходимые различия. В Java мы используем Spring: http://docs.spring.io/spring/docs/2.5.3/reference/beans.html
Построение реальных программных продуктов, которые выполняют & могут быть настроены для различных требований заказчика, трудно. Для этого требуется прочная платформа, реальные инструменты & умеренный кусок дизайнерских навыков.
Отдельный вопрос, не связанные непосредственно с Конфигурируемость & стратегий, является применение многопользовательских (что @Lee упоминал). Именно там приложение запускает несколько клиентов с разными настройками с одного и того же сервера одновременно.(Я занимался крупными инфраструктурными работами, недавно обновил архитектуру &). Однако это другой вопрос, еще более сложный (но только в некоторой степени) и не нужен в этой теме.
Мой опыт показывает, что Java и C# являются быстрый и надежный в то время как PHP является медленно, менее высоконадежный и стремится поощрять безопасности уязвимости. Я занимаюсь многими крупными приложениями (промышленными, правительственными, финансовыми, программными продуктами) с передовыми требованиями, системной интеграцией & высокопроизводительные функции - от компактных до средних и крупных приложений. Поэтому я довольно хорошо разбираюсь в том, как поставлять продукты с несколькими клиентами, и какие платформы позволяют мне успешно выполнять успешные и надежные приложения.
Это огромный вопрос, и для этого требуется либо много внутренних знаний, либо вам нужно упростить свой вопрос. Как «настраиваемый» - это каждое приложение, являются ли эти настройки базовыми, например, формами, или они каким-то образом изменяют основные действия приложения? существуют ли какие-либо проблемы с защитой данных, требующие разделения данных на брандмауэре и в хранилище в магазине? Самый простой ответ на ваши вопросы заключается в том, что это возможно, но каждый кусок пирога нужно рассматривать здесь. – Lee
Hi Lee. Все приложения могут иметь множество модификаций, но в целом ядро остается неизменным. что вы имеете в виду с межсетевым экраном-esc-in-store? –
Привет Луис. Разделение данных означает, можно ли использовать масштабированную базу данных между всеми клиентами или нет. Например, таблица пользователей. Могли бы вы иметь всех пользователей в одной базе данных для каждого сайта (то есть совместно используемого хранилища) с помощью логики программирования, чтобы ограничить доступ пользователей к этим сайтам или иметь отдельную базу данных каждого сайта и переключиться между базами данных в зависимости от запрашиваемого сайта. Существуют огромные проблемы защиты данных, связанные с выбором предпочтительного пути, особенно если это программное обеспечение корпоративного уровня/корпоративного уровня. – Lee