2015-10-29 3 views
0

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

Какие различные подходы или рамки доступны для таких вещей более элегантным и эффективным способом?

ответ

0

Первое, что вам нужно сделать, - это четко разделить код, являющийся стандартным продуктом и расширениями, с использованием отдельных пакетов и артефактов развертывания (поэтому с JAR для вашего ядра и JAR для расширений).

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

Небольшое примечание: не используйте термин J2EE больше, если не нужно поддерживать античные приложения.

+0

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