Можно ли создать веб-приложение как универсальный продукт, а не как разовое индивидуальное решение? - PullRequest
1 голос
/ 31 октября 2011

Есть бизнес-проблема, которую нужно решить.Очевидным решением является корпоративное веб-приложение - локально размещенный веб-сайт, обеспечивающий желаемую функциональность.

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

  • Его болеепродукта, чем единовременное решение;так что его можно настроить для разных клиентов
  • Можно предоставить «исправления» для этого веб-приложения, чтобы можно было удалять ошибки и добавлять улучшения с минимальным влиянием на операции
  • Интернетприложение должно быть способно работать с различными базами данных и существующими системами аутентификации

Возможно ли это вообще?Является ли это достаточно распространенным подходом, что есть известный способ сделать это?Было бы лучше использовать платформу приложений, такую ​​как Spring, или попытаться свести к минимуму зависимости от фреймворков?

Кроме того, любые ссылки или ссылки на книги, которые будут мне полезны, будут высоко оценены.

Заранее спасибо StackOverflow!

(мне кажется, что я не знаю всего, что мне нужно знать, прежде чем приступать к этому проекту, пожалуйста, не стесняйтесь указывать на то, чего у меня нет и стоит учесть)

Ответы [ 3 ]

2 голосов
/ 31 октября 2011

Я некоторое время работал над веб-приложением, которое можно развернуть в нескольких местах: оно предназначено для создания экземпляров на многих хостах.Это вполне возможно, , но это трудно .Написание кода таким образом, чтобы он мог работать таким образом, требует большой осторожности.

Ключом к этому является то, чтобы сделать все ваши зависимости от явных вещей и всю вашу конфигурацию управляемой свойствами, которые можно установить во время установки,Весна делает это намного проще!В частности, класс org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer позволяет вам использовать контекст сервлета в качестве источника значений, которые вы можете затем добавить в ваши bean-компоненты (например, с помощью @Value аннотаций).Гораздо сложнее сделать все это самостоятельно.Вот (упрощенная версия) того, что я использую:

<bean class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer">
    <property name="contextOverride" value="true" />
    <property name="location" value="/WEB-INF/default.properties" />
</bean>

Это объединяет свойства контекста сервлета поверх тех, которые вы предоставляете, как значения по умолчанию в вашем веб-приложении (определенно, это хорошая практика, если большинство вещей не происходитдолжны быть изменены в большинстве случаев), а затем использует их для определения свойств.Затем я применяю свойство конфигурации (например, foo.bar) к свойству bean-компонента, используя заполнитель, например:

@Value("${foo.bar}")
public void setFoobar(String foobar) { ... }

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

Другими ключевыми принципами являются сохранениевозможно в веб-приложении (таким образом, уменьшая возможность для развёртывания), быть очень осторожным при документировании всего и пробовать его с несколькими сервлет-контейнерами.Помните, что человек, развертывающий ваше веб-приложение , не не имеет доступа к содержимому ваших мыслей: вы должны записать его и точно сказать, что делать.(Слишком много инструкций на уровне «щелкни по этому, щелкни по нему, волшебство случается», но это плохие инструкции, поскольку точный метод будет меняться со временем: «1018» * почему поможет гораздо больше, потому что он более переносим.)

2 голосов
/ 31 октября 2011

Разработка программного обеспечения, особеннодля повторного использования требует анализа того, какие части / функции являются общими для вариантов использования, а какие нет, проводя грань между повторно используемым (библиотека) и настраиваемым / специализированным кодом.

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

Java предоставляет несколько хороших абстракций различных функций, таких как универсальная поддержка БД через JDBC.

Если вы этого еще не сделали, взгляните на серверы приложений, такие как JBoss или Glassfish.Они предоставляют множество основных функций для веб-приложений, поддерживают очень слабую связь между компонентами и легко настраиваются.Например, для переключения с одной СУБД на другую достаточно изменить одну строку конфигурации (учитывая, что поддерживаемый SQL достаточно похож).Развертывание приложений или частей часто можно выполнять на лету («горячее развертывание»), даже не останавливая сервер.
Плюс: существует огромное количество вспомогательных библиотек и сред, помогающих стандартизировать дизайн приложения.

1 голос
/ 14 ноября 2011

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

Как уже отмечали другие, следует учитывать различные факторы.

  • Безопасность
  • Безопасность, связанная с вашим продуктом,и как вы будете управлять функциональными требованиями продукта к внешним ролям безопасности.
  • Безопасность, аутентификация и авторизация не должны быть частью базового продукта.После авторизации роли должны быть сопоставлены с ролями продукта для достижения указанной функциональности.
  • Изображения и логотипы, требующие настройки.
  • Интернационализация.
  • Для работы с несколькими базами данных,Предполагая, что продукт имеет два разных взгляда: постоянство и запросы.Наш опыт заключался в использовании hibernate для поддержки нескольких баз данных, но теоретически в прошлом мы использовали только две базы данных.DB2 и MySQL.
  • Тестирование нескольких баз данных для каждого выпуска вашего продукта является трудной задачей.Ваши тесты проходят три раза или, по крайней мере, время от времени для поддержки нескольких баз данных.
  • Использование пользовательских баз данных и функций - это большое преимущество, вы можете использовать некоторые общие функции, но в вашем запросе будут использоваться специальные функции для баз данныхбыть болезненным и быть очень усердным, чтобы избежать их.
  • Поддерживаемые браузеры в вашем продукте.
  • Лицензии на банки сторонних производителей могут быть несовместимы / приемлемы для всех учреждений, поэтому вам придетсявнимательно следите за этим.
  • Насколько это возможно, включите свойства или конфигурацию, чтобы настроить все переменные.
  • Стратегия кэширования и стратегии инициализации свойств.

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

Cheers!

...