2013-03-15 24 views
6

Potrzebuję refaktoryzacji aplikacji Java EE, ponieważ obecny projekt nie jest bardzo modułowy, w rzeczywistości jest dość bałagan. Istnieje fasada biznesowa, ale ponieważ aplikacja została opracowana przez kilka osób, oryginalny projekt był kilkakrotnie ignorowany. Aplikacja działa obecnie na tomcat z JSF, ale wkrótce zostanie przeniesiona do websphere. Zrobiłem już badania na temat różnych wzorców projektowych, aby zamknąć logikę biznesową z widoku, a także jak sprawić, aby aplikacja była modułowa, tak aby można było łatwo umieścić w niej więcej funkcji, ponieważ aplikacja będzie ulepszana w przyszłości. Czytałem o OSGI, ale myślę, że byłoby to przesadą.Modułowa aplikacja java ee

Aplikacja jest już podzielona na warstwy. Ale daleko mi do zdefiniowania API. Już trochę wyczyściłem aplikację. Teraz wszystkie fasole uzyskują dostęp do logiki biznesowej dzięki metodom biznesowym. Ale fasada biznesowa składa się z około 40 metod, które moim zdaniem nie są zbyt miłe.

edycja 3rd party

Na przykład mam tych modeli klasy

  • ManageLdap z metod, takich jak createAccount i deleteAccount
  • GroupManager który zarządza grup LDAP

W fasada biznesowa Mam spełnione hod createAccount który

  • zwraca klasę ManagerLdap utworzyć konto LDAP i
  • wykonuje pewne rejestrowanie i również
  • połączeń GroupManager

Ten pseudo kod

package Model.ManageLdap 

public class ManageLdap 
{ 
    public ldapAccount createAccount() { } 

    public ldapAccount deleteAccount() { } 
} 

public class GroupManager 
{ 
    public bool addAccountToGroup(var account) { } 
} 

I fasada biznesowa

package BusinessFacade.Foo 

public class SomeFoo 
{ 
    public ldapAccount createAccount() 
    { 
    var ldapAccount = new ManageLdap.createAccount(); 
    Logger.log("Account created"); 
    var accountWasAdded = GroupManager.addAccountToGroup(ldapAccount); 
    }  
} 

Teraz jeśli chcę umieścić dodatkową funkcjonalność do aplikacji jak opcja tworzenia repozytorium Subversion dla użytkownika

  • muszę zaimplementować klasę modelu, aby utworzyć repo,
  • umieścić niektóre metody w elewacji biznesowej i utworzyć dodatkowy komponent bean, do którego można uzyskać dostęp w widoku.

To sprawia, że ​​fasada jest jeszcze większa i bardziej zagmatwana, ale nie jest to coś, co nazywam konstrukcją modułową.

Jak mogę oddzielić logikę biznesową od widoku bez konieczności posiadania fasady biznesowej?

+0

To zostało omówione wiele razy na SO. Spójrz na [to] (http://stackoverflow.com/questions/647922/java-application-architecture-guide?rq=1) i [this] (http://stackoverflow.com/questions/286846/idecribe -the-architektura-używasz-do-aplikacji-Java? rq = 1) i wiele więcej. – techuser

+0

To może być dobry temat dla [enterprise-architect] (http://stackoverflow.com/documentation/enterprise-architect) lub [architektura zaczynająca się] (http://stackoverflow.com/documentation/architecture/7435/) . – surfmuggle

+0

@techuser [Java Application Architecture Guide] (http://stackoverflow.com/questions/647922/) lub [Opisz architekturę aplikacji internetowych Java] (http://stackoverflow.com/questions/286846/) wydają się być do szerokiego pytania adresowego. Po przeczytaniu [best enterprise cart cart] (http://stackoverflow.com/a/6303154/) pomyślałem, że patrząc na kod open source np. [BroadleafCommerce] (https://github.com/BroadleafCommerce) może być dobrym początkiem, aby uzyskać pomysły na organizowanie kodu. – surfmuggle

Odpowiedz

3

Dla najpierw spróbować podzielić aplikację na kilka warstw, takich jak:

  • DAO
  • wyżej wymienioną
  • Bezpieczeństwa
  • Zobacz
  • Itd

Potem wyodrębnić pewne API z każdej z warstw (jak dao-api, service-api itd. Każdy z a moduły pi powinny mieć zestaw interfejsów).

Następnie należy utworzyć zestaw modułów (jak service-api, service-impl, dao-api, dao-impl) i obejmować niektóre narzędzia budowlane ( Gradle lub maven) do zarządzania nimi.

Do nie pozwalają na to, aby jeden moduł implementacji był zależny od innego modułu implementacji (tylko impl -> api lub api -> api).

Każdy moduł - oddzielny plik jar.

Po takim refaktoryzacji znacznie trudniej będzie przełamać projekt aplikacji w przyszłości.

+0

Dzięki za odpowiedź, zredagowałem moje oryginalne pytanie, mam nadzieję, że możesz dać mi kilka wskazówek na ten temat. –

+0

jeśli każdy moduł będzie sortował pliki jar, a następnie rozmieszczenie? –

+0

Czy mógłbyś wyjaśnić, co masz na myśli przez 'tylko implementacja -> api lub api -> api' oznacza, że ​​implementacja może być oparta na kilku apis (api lub api), które są oparte na innych api? – surfmuggle