Предоставление точек расширения в веб-приложении

У нас есть продукт со стандартной функциональностью, и наши клиенты также настраивают продукт в соответствии со своими требованиями. Но в настоящее время они вносят изменения в основной код продукта. Я хочу знать подходы, которые можно использовать, чтобы сделать приложение 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 больше, если не нужно поддерживать древние приложения.

Другие вопросы по тегам