Пламен обнови решението на 02.11.2011 19:52 (преди около 13 години)
Най-сериозната ти грешка, е че имаш само един Coupon
клас и само един Discount
клас. И двата правят по няколко неща и в тях има гадни if-ове.
Опитай да направиш 3 класа за промоции и два за купони. Дори няма нужда да имат общ родител, просто общ интерфейс.
Другото е, че ако ползваш sprintf
, няма нужда от rjust
. Виж как форматира %-5.2f
.
Така по-добре ли е?
Ако имаме три класа за промоция и два за купони реално нямаме повторение на код, заради различните им действия, така ли?
Също така, махнах Invoice
класа, изглежда ми по-добре всичко да се върши в Cart#invoice
. Исках да напиша отделен клас, но за да можеше да принтира нещата му трябваха много неща, които се намират в Cart
, затова реших всичко да се върши там (или почти всичко, по същите съображения сложих тези Product#to_rows
и Coupon#to_row
методи). Не знам дали е съвсем правилно така.
Edit: Махнах повторенията с малко наследяване. Станаха 10 класа. В началото се чудех откъде ще дойдат толкова много класове, когато ти спомена на лекцията 10 (или 12, не помня точно). Вече горе-долу виждам откъде :)
Edit2: Понеже се размотаваха аргументи наляво-надясно постоянно (quantity и price например), реших да позвам направо полетата на съответните класове (т.е. примерно Discount-ите да взимат стойностите за количество и единична цена направо от продукта, за който се отнасят). Не знам дали е лошо да се постъпи така в случая, но го оставям така.