-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathOpenCloseViolates.ts
More file actions
77 lines (62 loc) · 2.03 KB
/
Copy pathOpenCloseViolates.ts
File metadata and controls
77 lines (62 loc) · 2.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// Code which violates Oped Close Principles
class Product {
constructor(public name : string, public price : number){
}
}
class ShoppingCart {
public products : Product[] = []
public addProduct(product : Product){
this.products.push(product)
}
public calculateTotalProduc() : number {
const total = this.products
.map(x => x.price)
.reduce((accumulator, currEle) => {
return accumulator + currEle
}, 0);
return total
}
public printInvoice() : void {
const total = this.calculateTotalProduc()
console.log("Invoice Printed :", total);
}
public saveToDB(): void {
console.log("saving data to DB")
}
}
class ShoppingCartPrinter {
constructor(public cart : ShoppingCart){}
public printer() : void {
const total = this.cart.calculateTotalProduc();
console.log("Invoice Printed :", total);
}
}
class ShoppingDBService{
constructor(public cart : ShoppingCart){}
public saveCartToPostgresDb():void{
console.log("saving items", this.cart.products)
}
public saveCartToMongoDB():void {
console.log("saving items to MongoDB", this.cart.products)
}
public saveCardToDynamoDB():void {
console.log("saving items to DynamoDB", this.cart.products)
}
}
const product1 = new Product("1", 1)
const product2 = new Product("2", 2)
const product3 = new Product("3", 3)
const shoppingCart1 = new ShoppingCart()
shoppingCart1.addProduct(product1)
shoppingCart1.addProduct(product2)
shoppingCart1.addProduct(product3)
const shopingcartPrinter = new ShoppingCartPrinter(shoppingCart1)
shopingcartPrinter.printer()
//Here saving db, as, we had to introduce multiple saving option,
//we introduced multiple function
// Here we modified an existing class to do this
// this violates Open close principle
const shoppingDBService = new ShoppingDBService(shoppingCart1)
shoppingDBService.saveCartToPostgresDb()
shoppingDBService.saveCartToMongoDB()
shoppingDBService.saveCardToDynamoDB()