Hogy legyen Javában két osztályban ugyanaz a változóm getterrel és setterrel?
Van mondjuk A, B, C, D... vagy 20 osztály, ami mind bővíti a Z-t.
Az A-ban van egy változó getterrel és setterrel. Ugyanez kéne most a B-be is, ugyanarra a funkcióra.
a) Beleírom a B-be is -- kódismétlés.
b) Beleírom a Z-be -- a többségnek felesleges.
c) Közérakok egy Z1-et, ami bővíti Z-t, és benne van a cucc -- jó, de minden ismétlődő változónál ezt fogom csinálni? Még ütközés is lesz.
d) Interface -- nem jó, nem lehet benne változó + nem lehet implementálni a függvényeket.
d :)
Interface + Adapter osztály + Aggregáció
Ez erősen szituációfüggő. Mennyire kapcsolódik logikailag A és B? Ha azon túl, hogy mindkettő Z-ből származik, de egyébként nagy mérétkben eltérő céljuk és szerkezetük van, akkor inkább célszerű az (a) megoldásra menni, és akkor mindkettőnek lesz egy-egy ugyanolyan változója, amire ugyanolyan getter-setter van rárakva. Ha logikailag jobban összekapcsolódnak, és van relevanciája annak, hogy mindkettő tartalmazza ezt a változót, akkor (c) vagy (d). A (d) megoldás igazából nem tér el sokban az (a) megoldástól, annyi a lényegi különbség, hogy az interfészen keresztül egy plusz logikai kapocs épül ki köztük, és kezelheted őket egységesen az interfészük alapján. A (c) megoldás tűnhet talán a legelegánsabb megoldásnak, Cakkpakk létrehozol eg yúj ágat az öröklődési fádban, és levan a gond. Csak mint mondtad, ez sok problémát okozhat, ha ezt még jópár változóval el akarod játszani.
A kérdés amit fel kell tenned magadnak igazából az, hogy azon felül, hogy egy ugyanolyan nevű, és szerepű változót implementálnál mindkét osztályban, maguk az osztályok között van-e releváns logikai kapocs ami miatt érdemes őket összekötni? Egy-egy kósza adattag miatt szerintem fölösleges plusz rétegeket létrehozni az osztályszerkezetedben, ha az nem bővíti relevánsan az osztály szerepkörét. Fontos megjegyezni, hogy osztályokat felülről építünk, nem alulról. Nem azt találjuk ki először, hogy mi lesz a nx/z.23-adik privát adattag, hanem hogy milyen feladatkört kell az osztálynak ellátnia, és milyen módon fogsz kommunikálni vele. Egy jól átlátható, tiszta osztályszerkezet erre épül, nem az implementációs eltérésekre.
Jó, ez egy céges alkalmazás, nem dobhatom ki ide az egészet... Arról van szó, hogy Z az adatbázis tábláit reprezentáló általános datasetosztály, aminek sok leszármazottja van. A az ügyfelek alapadatait tartalmazó tábla datasetje, B pedig egy ehhez idegen kulccsal kapcsolódó másik tábláé. Sok más hasonló szerepű tábla is van, mint a B, és vannak egészen más jellegű táblákat reprezentáló osztályok.
Időnként duplikációkat szüntetünk meg, és ez törléssel jár. Az A osztálynak tisztában kell lennie vele, hogy a törlés duplikációmegszüntetés keretében történik vagy direkt törléssel, ezt fejezi ki a változó. Most kiderült, hogy a B-nek is tudnia kell ugyanezt. A többinek nem, vagy egyelőre úgy látszik, hogy nem.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!