Skip to content

Commit 1434b67

Browse files
committed
#26 - JavaScript
1 parent e851828 commit 1434b67

File tree

1 file changed

+150
-13
lines changed

1 file changed

+150
-13
lines changed
Lines changed: 150 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,162 @@
1+
//EJERCICIO
2+
//Código sin seguir el principio de Responsabilidad Única
3+
class CarNoSRP {
4+
constructor(model, year, price) {
5+
this.model = model;
6+
this.year = year;
7+
this.price = price;
8+
9+
this.stock = 2;
10+
this.status = this.setStatus();
11+
}
12+
13+
//Esta sería la simulación de una lógica que le muestre información al cliente y le permita adquirir un carro
14+
describe() {
15+
console.log(`${this.model} (${this.year}): $${this.price.toLocaleString()}`);
16+
}
17+
18+
getStatus() {
19+
console.log(`El modelo ${this.model} está ${this.status}`);
20+
}
21+
22+
buyCar(payment) {
23+
if (this.status === 'disponible') {
24+
if (this.validatePayment(payment)) {
25+
console.log(`Felicidades! Ha adquirido un ${this.model} totalmente nuevo!`);
26+
this.stock--;
27+
this.setStatus();
28+
} else {
29+
console.log('Debe abonar el monto total del modelo para comprarlo');
30+
}
31+
} else {
32+
console.log('Modelo no disponible');
33+
}
34+
}
35+
36+
/*
37+
Esta sería la simulación de una lógica que procese los pagos, gestione inventarios
38+
o realice cualquier otra función que no interesa o no conviene que sepa el cliente
39+
*/
40+
validatePayment(payment) {
41+
return payment >= this.price;
42+
}
43+
44+
setStatus() {
45+
if (this.stock > 0) {
46+
this.status = 'disponible';
47+
} else {
48+
this.status = 'agotado';
49+
}
50+
51+
return this.status;
52+
}
53+
54+
getStock() {
55+
console.log(`Inventario actual del modelo ${this.model}: ${this.stock}`);
56+
}
57+
}
58+
59+
/*
60+
Esto está mal por varias razones:
61+
62+
- Se complica la tarea de implementar procesos en otras clases si los necesitan.
63+
- De la misma manera la clase vendrá con procesos que no necesita en todos los casos que será implementada.
64+
- Complica el mantenimiento, al juntar demasiados procesos.
65+
- Hace más difícil definir los test unitarios.
66+
- El código es algo más ilegible, pues no queda claro para qué es la clase.
67+
68+
En general, el principio de responsabilidad única busca simplificar y facilitar el desarrollo,
69+
lo cual es todavía más útil si se trabaja con código que luego será leído y editado por otras personas.
70+
*/
71+
72+
let car1 = new CarNoSRP('Chevrolet Tracker', 2022, 20190);
73+
car1.describe();
74+
car1.getStatus();
75+
car1.buyCar(20000);
76+
car1.buyCar(20200);
77+
car1.getStock();
78+
car1.buyCar(20190);
79+
car1.getStock();
80+
car1.buyCar(30000);
81+
car1.buyCar(30000);
82+
car1.getStock();
83+
84+
//Código siguiendo el principio de Responsabilidad Única
85+
//Lógica de negocio
86+
console.clear();
87+
88+
const Inventory = {
89+
list: [],
90+
91+
search: function (itemName) {
92+
let result = undefined;
93+
94+
this.list.forEach((element) => {
95+
if (element[itemName]) {
96+
result = element;
97+
}
98+
});
99+
100+
return result;
101+
},
102+
103+
displayInventory: function () {
104+
console.log('\nINVENTARIO');
105+
this.list.forEach((element) => {
106+
console.log(element);
107+
});
108+
},
109+
};
110+
111+
class Item {
112+
constructor(itemName, quantity = 0) {
113+
this[itemName] = quantity;
114+
Inventory.list.push(this);
115+
}
116+
117+
addQuantity(itemName, addNum) {
118+
return (this[itemName] = +addNum);
119+
}
120+
121+
substractQuantity(iteName, substractNum) {
122+
return (this[iteName] = -substractNum);
123+
}
124+
}
125+
126+
class Car {
127+
constructor(model, year, price) {
128+
this.model = model;
129+
this.year = year;
130+
this.fullName = `${model} ${year}`;
131+
this.price = price;
132+
this.stock = new Item(this.fullName, 5);
133+
}
134+
}
135+
136+
new Car('Ram Pickup', 2021, 40150);
137+
new Car('Chevrolet Silverado', 2022, 43990);
138+
139+
console.log(Inventory.search('Ram Pickup 2021'));
140+
//Lógica de cliente
141+
1142
/*
2-
* 26
3-
* EJERCICIO:
4-
* Explora el "Principio SOLID de Responsabilidad Única (Single Responsibility
5-
* Principle, SRP)" y crea un ejemplo simple donde se muestre su funcionamiento
6-
* de forma correcta e incorrecta.
7-
*
8143
* DIFICULTAD EXTRA (opcional):
9144
* Desarrolla un sistema de gestión para una biblioteca. El sistema necesita
10-
* manejar diferentes aspectos como el registro de libros, la gestión de usuarios
145+
* manejar diferentes aspectos como el registro de libros, la gestión de Users
11146
* y el procesamiento de préstamos de libros.
147+
12148
* Requisitos:
13-
* 1. Registrar libros: El sistema debe permitir agregar nuevos libros con
149+
* 1. Registrar libros: El sistema debe permitir agregar nuevos libros con
14150
* información básica como título, autor y número de copias disponibles.
15-
* 2. Registrar usuarios: El sistema debe permitir agregar nuevos usuarios con
16-
* información básica como nombre, número de identificación y correo electrónico.
17-
* 3. Procesar préstamos de libros: El sistema debe permitir a los usuarios
151+
* 2. Registrar Users: El sistema debe permitir agregar nuevos Users con
152+
* información básica como name, número de identificación y correo electrónico.
153+
* 3. Procesar préstamos de libros: El sistema debe permitir a los Users
18154
* tomar prestados y devolver libros.
155+
19156
* Instrucciones:
20157
* 1. Diseña una clase que no cumple el SRP: Crea una clase Library que maneje
21158
* los tres aspectos mencionados anteriormente (registro de libros, registro de
22-
* usuarios y procesamiento de préstamos).
159+
* Users y procesamiento de préstamos).
23160
* 2. Refactoriza el código: Separa las responsabilidades en diferentes clases
24161
* siguiendo el Principio de Responsabilidad Única.
25-
*/
162+
*/

0 commit comments

Comments
 (0)