Wiele parametrów konstruktora czy klasa abstrakcyjna?

Odpowiedz Nowy wątek
2015-08-25 21:24
0

Refaktoruje ostatnio bardzo dużo słabego kodu w pracy i w trakcie usuwania duplikacji zacząłem się zastanawiać nad pewną kwestią. Załóżmy, że wydzielam sobie kod pewnego panelu GUI. Panel jest używany w wielu miejscach i jest generalnie identyczny, ale różni się:

  • labelkami
  • tooltipami
  • akcjami jak ktoś cośtam kliknie na przykład

Gdyby tych parametrów było mało i gdyby nie było tam "akcji" to pewnie bez zastanowienia wrzucałbym je przez konstruktor. Liczbę parametrów zawsze można ograniczyć jakimś DTO ale to taki sobie pomysł bo to DTO nigdzie nie byłoby używane a jedynie tworzone w miejscu tworzenia panelu z parametrów znanych w chwili kompilacji. Więc dość słabo. Dodatkowo "akcje" trzeba by wrzucać jako jakieś lambdy albo funktory.
Dodatkowo część tych parametrów może być zostawiona jako domyślna, co mocno komplikuje opcje z konstruktorem, bo albo mamy mother of all constructors a potem kupę nulli jako parametry albo mamy milion konstruktorów (mało możliwe bo niektóre parametry są tego samego typu ;) ).

W związku z tym pomyślałem że można to zrobić z zupełnie innej strony. Zrobić klasę abstrakcyjną z metodami w stylu getXYZTooltip() a wymagane akcje zrobić jako metody abstrakcyjne. Wtedy tworząc obiekt musimy zaimplementować wymagane metody i ewentualnie przeładować te gdzie nie chcemy używać opcji domyślnych. Tylko że to rozwiązanie wydaje mi się trochę dziwne, bo jednak tworzymy nową klasę (choćby i anonimową) podczas gdy w rzeczywistości te klasy różnią się właściwie tylko parametrami (szczególnie jeśli uznamy lambdy za parametry).

Co o tym myślicie?
@somekind @Koziołek @Krolik @niezdecydowany @karolinaa @MSM @winerfresh @stryku @Patryk27 @katelx @WhiteLightning @datdata @spartanPAGE @Wizzie @Azarien @Satirev @MarekR22 @Afish @panryz @Wibowit @azalut i więcej mi się nie chce wymieniać, ale niech się nikt nie czuje pominięty! (kolejność losowa!)


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
edytowany 1x, ostatnio: Shalom, 2015-08-25 21:25
Pokaż pozostałe 12 komentarzy
@Shalom ja bym chetnie taka funkcje chciał :P czasem coś szukam o kims na forum bo np pamietam ze gdzies sie udzielil i potrzebuje tego tematu i męczarnia jest ;) - azalut 2015-08-25 22:54
ja ostatnio przejrzałem moje stare posty :D Laik laik laik ale teraz mam świadomość jakim userem byłem w oczach niektórych ja zadawałem takie pytania :D - panryz 2015-08-25 22:55
aaa w ogóle @Shalom dlaczego ja się tutaj znalazłem w tym gronie? Za wiele wiedzy tutaj nie zostawiam (mało pytań o androida) jedyne co to mam na koncie bana (i to cofniętego) za podcinanie skrzydeł "nowicjuszom" :D - panryz 2015-08-25 22:57
@panryz ot wybrałem top trolli :P - Shalom 2015-08-25 23:10
O, ktoś mnie woła, i to dwa razy w jednym wątku. @azalut - jeśli masz jakieś wymarzone zapytanie/data mining na bazie 4p to powiedz, mogę coś wykonać :P. Wszystkie Twoje głupie posty sprzed 2 lat wyjdą na jaw. - msm 2015-08-25 23:35

Pozostało 580 znaków

2015-08-26 15:13
2

@Shalom! ktos ci sie na konto wlamal i pytania zadaje ;)

ja bym szla w kierunku tych klas abstrakcyjnych, tak zeby akcje byly metodami a caly smietnik zwiazany z labelami, tooltipami etc upakowac w cos slownikopodobnego (skoro nie chcesz miec zewnetrznych zasobow), tzn idkontrolki:wartosc i trzymac jako jednego gettera.
oczywiscie wszystko opakowac w jakas fabryke, w koncu java ;)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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