jel netko rijesio refactor i onaj zadatak s BPMN na oglednom?
evo saljem nekakva moja razmisljanja u nastavku, uzmite sa zrnom soli.
Refactor:
switch u metodi GetCartItemPrice -> replace conditional with polymorphism. Napravio bi da je Beverage abstract i napravio bi 4 klase za svaki od tipova BeverageType koji bi imali BasicPrice i Name. Napravio bih metodu getPrice koja u tijelu racuna cijenu (ovo unutar caseova). Zamijenio bih switch case sa pozivom metode getPrice iz klase Beverage, ostatak koda moze ostati jer se onda ta metoda bavi iskljucivo racunanjem cijene CartItema. Nisu nam vise potrebni property Type unutar klase Beverage i enum BeverageType.
switch u metodi GetCoinsValueAndDiscount -> replace conditional with polymorphism. Napravio bih za svaki tip coina klasu, Coin bi postao abstract, svaki tip coina bi imao svoju boju i metode za vracanje discounta i valuea koje bi na “out” nacin primale value i discount i punile te varijable sa svojim vrijednostima . Na taj nacin switch nije potreban i mozemo jednostavno pozvati metode i dobiti vrijednosti.
u metodi GetTotalPrice -> replace temp with query, itemPrice nije potreban ovdje, mozemo samo u total zbrajati GetCartItemPrice(item)
GetCartItemPrice, tijelo funkcije se moze preseliti u CartItem gdje se nad this moze doci do Beveragea. Takoder izdvojio bih “Pipi” u konstantu na vrhu klase zbog preglednosti koda, nesto kao magicni brojevi. U klasi Payment unutar GetCartItemPrice bi se zvala metoda nad CartItemom GetPrice.
unutar GetCartItemPrice bi extractao if else u zasebnu metodu CalculateSpecialDiscounts() koja bi provjervala specijalne akcije poput Pipi u ovom slucaju.
BPMN:
ovaj OR ne moze biti tu unutar AND tj. neispravan izlazak iz paralelne grane
cini mi se da se u sredini skice ne moze izvesti AND split pa onda odmah AND join
treca neispravnost - ne znam sto bi moglo biti