2013-11-15 2 views
1

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

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

Это кошмар для обновления и масштабирования!

Хотелось бы узнать о хороших подходах к оптимизации этого: тот же экземпляр приложения с унаследованными классами для каждой компании? были бы интерфейсы здесь? Как мы можем работать с централизованным приложением на разных серверах? Мы не хотим использовать только один сервер для всех.

+0

Это огромный вопрос, и для этого требуется либо много внутренних знаний, либо вам нужно упростить свой вопрос. Как «настраиваемый» - это каждое приложение, являются ли эти настройки базовыми, например, формами, или они каким-то образом изменяют основные действия приложения? существуют ли какие-либо проблемы с защитой данных, требующие разделения данных на брандмауэре и в хранилище в магазине? Самый простой ответ на ваши вопросы заключается в том, что это возможно, но каждый кусок пирога нужно рассматривать здесь. – Lee

+0

Hi Lee. Все приложения могут иметь множество модификаций, но в целом ядро ​​остается неизменным. что вы имеете в виду с межсетевым экраном-esc-in-store? –

+0

Привет Луис. Разделение данных означает, можно ли использовать масштабированную базу данных между всеми клиентами или нет. Например, таблица пользователей. Могли бы вы иметь всех пользователей в одной базе данных для каждого сайта (то есть совместно используемого хранилища) с помощью логики программирования, чтобы ограничить доступ пользователей к этим сайтам или иметь отдельную базу данных каждого сайта и переключиться между базами данных в зависимости от запрашиваемого сайта. Существуют огромные проблемы защиты данных, связанные с выбором предпочтительного пути, особенно если это программное обеспечение корпоративного уровня/корпоративного уровня. – Lee

ответ

0

Я использую Java, Spring и OO для конфигурирования & расширяемость. Обычно приложения имеют таблицы «config» со свойствами, но необходимость в конфигурируемости обычно выходит за рамки тех свойств, которые легко конфигурировать.

Это действительно домен, где языки программирования OO, полный контроль над контейнером и мощные фреймворки, такие как Spring, для встраивания конфигурации/зависимостей & Hibernate для сопоставления ORM - приходят в свои руки.

Вы можете «попробовать» сделать все это на PHP, но с более чем 20-летним опытом работы на всех языках - и без неуважения - для серьезного продукта вам может потребоваться перейти к серьезному языку.

Относительно того, что вы на самом деле нужно сделать:

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

  2. Стратегия. Алгоритмы, такие как расчет налога, построение счета или сопряжение с внешними системами, реализуются как стратегии, которые могут быть подключены к &. https://en.wikipedia.org/wiki/Strategy_pattern

  3. Конфигурация фасоли фаза/зависимость от зависимостей. Для развертывания конфигурации &. Этот слой выбирает, создает & настраивает ваши стратегии, позволяющие вам выбрать &, параметризовать соответствующие алгоритмы для ваших требований клиентов. Это модульность жизни, которая позволяет вам делиться большинством кодовых баз между клиентами, но вставлять здесь необходимые различия. В Java мы используем Spring: http://docs.spring.io/spring/docs/2.5.3/reference/beans.html

Построение реальных программных продуктов, которые выполняют & могут быть настроены для различных требований заказчика, трудно. Для этого требуется прочная платформа, реальные инструменты & умеренный кусок дизайнерских навыков.

Отдельный вопрос, не связанные непосредственно с Конфигурируемость & стратегий, является применение многопользовательских (что @Lee упоминал). Именно там приложение запускает несколько клиентов с разными настройками с одного и того же сервера одновременно.(Я занимался крупными инфраструктурными работами, недавно обновил архитектуру &). Однако это другой вопрос, еще более сложный (но только в некоторой степени) и не нужен в этой теме.

Мой опыт показывает, что Java и C# являются быстрый и надежный в то время как PHP является медленно, менее высоконадежный и стремится поощрять безопасности уязвимости. Я занимаюсь многими крупными приложениями (промышленными, правительственными, финансовыми, программными продуктами) с передовыми требованиями, системной интеграцией & высокопроизводительные функции - от компактных до средних и крупных приложений. Поэтому я довольно хорошо разбираюсь в том, как поставлять продукты с несколькими клиентами, и какие платформы позволяют мне успешно выполнять успешные и надежные приложения.

+0

Просто интересно, как у меня был только год в этой области, что делает PHP не «серьезным»? – Albzi

+0

Привет, Томас, вы, вероятно, покинули PHP несколько лет назад, когда PHP просто использовался для того, чтобы делать вещи в середине HTML-блоков в беспорядке. PHP сильно изменился. Версии 5.4/5.5 очень ориентированы на OO. Существуют большие рамки, такие как Laravel, или предварительно скомпилированная структура (сделанная с C) Phalcon PHP. Я сам использовал Codeigniter и сейчас перехожу к Laravel, но я не могу понять, как это сделать, что подразумевает более простой проект/приложение. –

+0

См. Редактирование. Я подробно описал эффективный и полный подход к внедрению многопользовательской и многозадачной конфигурации для вашего приложения (и программных продуктов в целом). Я не согласен, что это «огромный вопрос», это простой вопрос на уровне архитектуры, который с правильными инструментами и платформой может быть очень эффективно решен. –

Смежные вопросы