Jak zbudować kontroler dla architektury trójwarstwowej.

Jak zbudować kontroler dla architektury trójwarstwowej.
XE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 33
0

Muszę napisać program w Javie w oparciu o architekturę trójwarstwową. Mam warstwę logiki gdzie mam jakieś tam obiekty i metody.
Tworzę interfejs z jakimiś tam przyciskami i na koniec tworzę kontroler - klasę implementującą ActionListener który obsługuje te przyciski. Mam tylko mały problem bo jak obiekty logiki tworze gdzie indziej to nie mogę się przez ich nazwę odwołać do metod gdy chce je wywołać w obiekcie kontrolera. Jak to rozwiązać? A może zupełnie nie poprawnie do tego podchodzę i wykonać to inaczej?

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

Problem który napotkałeś nazywa się Wstrzykiwaniem Zależności (Dependency Injection). Sposobów na jego rozwiązanie jest sporo. Najprostszy polega po prostu na dostarczeniu serwisów odpowiadających za logikę do kontrolera za pomocą kontruktora / setterów.

AA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
0

Jednym słowem spring.

XE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 33
0

Mógł byś szerzej wyjaśnić jak korzystając z settera lub konstruktora rozwiązać ten problem?

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

Ech. Przykładowo mamy KontrolerKontaBankowego i SerwisObsługiKonta.
Kontroler w trakcie tworzenia dostaje referencje do SerwisObsługiKonta za pomocą argumentu konstruktora albo za pomocą settera. Jeśli użytkownik wykonuje jakąś akcje to kontroler ją obsługuje a następnie wykonuje odpowiednie operacje na SerwisObsługiKonta (który jest obiektem związanym z modelem). Nie bardzo rozumiem w czym widzisz problem.

AA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
0

Jak dobrze rozumiem masz taką sytuację. Masz clase A która korzysta z jakich metod z klasy B. To co czego potrzebujesz to refrencja to klasy B.

Kopiuj
class A{
  public B refB;
  void setB(B obj){
     this.refB = obj;
 }//Teraz mozesz za pomoca refB korzystac z objektu B tylko musisz go sobie w kodzie setterm podlaczyc
}


class B{
    void bFun(){
    System.out.println("Jakas fun");
  }
}

potem w main coś takiego:

Kopiuj
   
                A a = new A();
		B b = new B();
		a.setB(b);
		a.refB.bFun()

Jak masz refencje jako private to musisz wywołanie metody B jakość opakować sobie.
Spring załatwia problem wstrzykiwania poprzez adnotację

@Autowierd
B refB

Wtedy contener springa sam znajduje klase jaką tam ma wstrzyknąć. Ale też robi to defacto za pomocą setterów lub konstruktorów ale jest mniej pisania lub można sobie wszystko skonfigurować w jednym pliku XML.

  • Rejestracja: dni
  • Ostatnio: dni
0

Mam jescze jeden problem, bo buttony mam w oknie głównym a kontroler w osobnej klasie, jak skomunikować taki przycisk z actionListenerem?

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

@Xenderr zrobić nową klasę implementującą ActionListener i przekazując do tej klasy referencje do obiektu na którym ma działać (przez konstruktor albo przez setter).

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.