Czy interfejs to dobre rozwiązanie ?

0

Mam problem z rozplanowaniem pewnych elementów w mojej aplikacji.

Otóz.

Mam - na razie - dwie klasy

ProjectTools, CategoryTools

obie mają PRAWIE identyczne metody

public void addProject(int customer_id, String title, String desc) / public void addCategory(String title, String desc)
public void editProject(int uid) / public void editCategory(int uid)
public void deleteProject(int uid) / deleteCategory(int uid)
public Project getProject(int uid) / public Category getCategory(int uid)

Jak sami widzicie edit i delete generalnie sa identyczne, get są PRAWIE identyczne, add są różne

Na 100% będzie jeszcze kilka podobnych klas. Co z tym fantem zrobić? Myślałem o interfejsie, ale chyba nie da rady w nim zaimplementować metod get i add.

Co z tym fantem mogę zrobić ?

0

stworz jedna klase i na jej podstawie tworz pochodne a nie interfejs.
Jesli wiekszosc metod sie nie rozni to bedzie najlepsze rozwiazanie.

0
gosc napisał(a)

stworz jedna klase i na jej podstawie tworz pochodne a nie interfejs.
Jesli wiekszosc metod sie nie rozni to bedzie najlepsze rozwiazanie.

Czyli rozumiem stworzyć jedną ogólną i w klasach dziedziczących przeładowywac np. metody add i get ?

0

IMHO to dwa osobne byty, przecież to zwykłe DAO masz, nie ma tu nic na dziedziczenie.
Lepsze by był właśnie interfejs uogólniony (takie CRUD). Poszukaj na forum jest trochę przykładów.

0

a jak taki interfejs powinien wyglądać ? Bo jakoś tego nie widzę żeby metody add i get tam wstawić

0

a może wzorzec "Template Method", albo strategia?

0

Metoda szablonowa będzie dobra np w samym dostępie do danych (SQL)
Strategia np. w wyborze źródła danych, jeśli przewidujesz więcej niż jedno.

Trochę zamotałeś, ProjectTools to DAO dla Project, więc metoda add powinna przyjmować Project jako argument.
Pewnych powtórzeń w DAO ciężko uniknąć, chcesz to zrobić lepiej:

http://www.ibm.com/developerworks/java/library/j-genericdao.html

A tu przykładowy interfejs @Koziołka znajdziesz.
http://4programmers.net/Forum/viewtopic.php?id=117923&start=10

0

czyli jeżeli dobrze rozumiem mój interfejs powinien wyglądać jak interfejs napisany przez Koziołka

public interface Pobieranie<Dana, Warunek> {

        public Dana pobierz(Warunek warunek);

        public void usun(Dana dana, Warunek warunek);

        public void dodaj(Dana dana);

        public void aktualizuj(Dana stara, Dana nowa);
}

Po zapoznaniu się z tym artykułem rozumiem, że metody odczytywania i kasowania powinny otrzymywać parametr w postaci id rekordu, z kolei dodawania i edycji parametry w postaci obiektów, a nie jak do tej pory robiłem w postaci poszczególnych danych do edycji.

I teraz wykorzystując ten interfejs mogę bezproblemowo załączać do do każdej klasy służącej do pobierania danych (czyli DAO)

0

Tak jak wyraźnie masz to określone przez ten interfejs do każdej metody przekazujesz obiekt.
To DAO sobie wybiera na podstawie czego ma skasować taki obiekt.

0

Super dzięki za pomoc. Już chyba rozumiem jak to zrobić, a przy okazji nauczylem się czegoś nowego :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1