9. WHAT IS WRONG?
class Order {
public calculateTotalSum() {/* ... */ }
public getItems() {/* ... */ }
public getItemCount() {/* ... */ }
public addItem(item: Item) {/* ... */ }
public removeItem(item: Item) {/* ... */ }
public printOrder() {/* ... */ }
public showOrder() {/* ... */ }
public load() {/* ... */ }
public save() {/* ... */ }
public update() {/* ... */ }
public delete() {/* ... */}
}
13. BETTER CODE
class Order
{
public calculateTotalSum() {/*...*/}
public getItems() {/*...*/}
public getItemCount() {/*...*/}
public addItem(item: Item) {/*...*/}
public deleteItem(item: Item) {/*...*/}
}
class OrderRepository
{
public load(){}
public save(){}
public update(){}
public delete(){}
}
class OrderViewer
{
public printOrder(){}
public showOrder(){}
}
15. WHAT IS WRONG?
class OrderCalculator
{
public calculate(orders): number {
let sum = 0;
for (let order of orders) {
if (order instanceof SingleOrder) {
sum += this.calculateSingle(order);
}
if (order instanceof MultiOrder) {
sum += this.calculateMulti(order);
}
}
return sum;
}
private calculateSingle(order: SingleOrder): number {}
private calculateMulti(order: MultiOrder): number {}
}
19. BETTER CODE
class OrderCalculator {
public calculate(orders: OrderInterface[]){
let sum = 0;
for (let order of orders) {
sum += order.calculate();
}
return sum;
}
}
interface OrderInterface {
calculate(): number;
}
class SingleOrder implements OrderInterface {
calculate(): number {}
}
class MultiOrder implements OrderInterface {
calculate(): number {}
}
21. WHAT IS WRONG?
class Order {
protected items: Item[] = [];
public addItem(item: Item) {
this.items.push(item);
}
public getItems() {
return this.items;
}
}
class OrderCollector {
public collect(order: Order, items: Item[]) {
for (let item of items) {
order.addItem(item);
}
}
}
23. WHAT IS WRONG?
class Order {
protected items: Item[] = [];
public addItem(item: Item) {
this.items.push(item);
}
public getItems() {
return this.items;
}
}
class FreeOrder extends Order {
public addItem(item: Item) {
if (item.price() !== 0) {
throw new Error();
}
this.items.push(item);
}
}
class OrderCollector {
public collect(order: Order, items: Item[]) {
for (let item of items) {
order.addItem(item);
}
}
}
35. class Customer {
private currentOrder: Order = null;
public buyItems() {
if (!this.currentOrder) {
return false;
}
const processor = new OrderProcessor();
return processor.checkout(this.currentOrder);
}
}
class OrderProcessor {
public function checkout(order: Order){/*...*/}
}
WHAT IS WRONG?