Refaktoring - DDD

Postanowiłem zmienić strukturę projektu, żeby lepiej wykorzystać idee MVC i DDD

Zmiany robiłem w oparciu o prezentację [Crafted Design](http://www.slideshare.net/sandromancuso/crafted-design-geecon-2014). 

Główne założenia:

- Podział na core i mechanizmy dostępu (np. web, rest, udp, itp)

Struktura Core'a:
- package `.model` - wyraźnie umiejscowione obiekty domenowe 
  - wiadomo co stanowi sedno aplikacji
  - tu umiejscowione są wszystkie encje domenowe i klasy pomocnicze z nimi związane
  - funkcjonalności umiejscowione są w serwisach domenowych
  - zawiera interfejsy do komunikacji z zewnętrznymi obiektami (np. bazy danych, web serwisy)
- package `.usecase` - przejrzysty interfejs aplikacji
  - wiadomo co aplikacja robi
  - stanowi fasadę aplikacji dla użytkowników 
  - usecase'y wywołują odpowiednie serwisy domenowe, definiują flow operacji, a nie jej implementację
- package `.infrastructure` - osobne miejsce na infrastrukturę aplikacji 
  - integracja z technologiami i usługami
  - funkcjonalności i obiekty, które bezpośrednio nie stanowią domeny aplikacji
  
Struktura Web 
- package `.controller` - obsługa żądań - wywołanie usecase'ów
- package `.view` - obiekty definiujące widok, walidatory
- package `.infrastructure` - parsery, konwertery

Zalety:
- aplikacja jest bardziej przejrzysta i modularna
- wiadomo gdzie dodać nowe feature'y
- dużo łatwiej wybrać elementy które warto przetestować

Spodobała mi się ta struktura projektu i chciałem ją wypróbować na naszej aplikacji. Wydaje mi się że efekt jest całkiem fajny. Napiszcie co sądzicie o tym. (Do porównania najlepiej jest otworzyć sobie dwa okna IDE z tym branchem i z masterem i porównać strukturę package'y i klas).

Jak nikt nie zgłosi sprzeciwu to jutro zmerguje te zmiany.

Note: żeby było lepiej widać faktyczną strukturę package'y zrobiłem że żaden moduł nie korzysta z commonsów, To można będzie później przywrócić.