Предоставление точек расширения в веб-приложении
У нас есть продукт со стандартной функциональностью, и наши клиенты также настраивают продукт в соответствии со своими требованиями. Но в настоящее время они вносят изменения в основной код продукта. Я хочу знать подходы, которые можно использовать, чтобы сделать приложение j2EE расширяемым или настраиваемым. Чтобы уточнить это, прочитайте ниже: например: рассмотрим ниже класс:
Class A{
public void doSomething(Object o){
// standard product functionality goes here.
// due to client customizations. client code also goes here.
}
}
В вышеприведенном классе клиент добавил код к коду основного продукта. В идеале код продукта не должен изменяться по принципу открытого-закрытого.
В настоящее время мы напрямую не разрешаем клиенту добавлять код в метод, но предоставляем точки настройки, как показано ниже.
Class A{
public ClassAExtension ext;
public void doSomething(Object o){
// standard product functionality goes here.
// client code goes in doClientCustomizations();
ext.doClientCustomizations(Object o);
}
}
Теперь клиент использует класс ClassAExtension для переопределения поведения. Тем не менее, этот подход все еще не столь элегантен и делает код продукта более загроможденным с такими точками настройки.
Какие существуют различные подходы или структуры, позволяющие делать такие вещи более элегантным и эффективным способом?
1 ответ
Первое, что вы должны сделать, это четко разделить код, являющийся стандартным продуктом, и расширения, используя отдельные пакеты и артефакты развертывания (таким образом, имея JAR для вашего ядра и JAR для расширений).
Придерживаясь базовых механизмов Java, вы можете, например, указать методы подключения в вашем компоненте, которые по умолчанию ничего не делают, но могут быть переопределены настраиваемым компонентом, расширяющим основной компонент.
Небольшое примечание: не используйте термин J2EE больше, если не нужно поддерживать древние приложения.