SOLID зарчмууд – код жишээтэй тайлбар
SOLID зарчмууд – программ хангамжийн дизайн, объект хандалттай програмчлалд ашиглагддаг таван үндсэн зарчим юм . Эдгээр нь кодыг илүү уян хатан, засварлахад хялбар, дахин ашиглах боломжтой болгодог.
S – Single Responsibility Principle (Нэг үүргийн зарчим)
Класс нь зөвхөн нэг л үүрэг гүйцэтгэх ёстой.
Жишээ:
class User {
constructor(public name: string) {}
}
class EmailService {
sendWelcomeEmail(user: User) {
console.log(`Email sent to ${user.name}`);
}
}
Userзөвхөн хэрэглэгчийн мэдээллийг хадгална.EmailServiceзөвхөн имэйл илгээнэ.
O – Open/Closed Principle (Нээлттэй/Хаалттай зарчим)
Класс нь өргөтгөх боломжтой, гэхдээ өөрчлөгдөхгүй байх ёстой.
Жишээ:
interface Discount {
apply(price: number): number;
}
class SeasonalDiscount implements Discount {
apply(price: number) { return price * 0.9; }
}
- Шинэ хөнгөлөлт нэмэхэд кодыг өөрчлөх шаардлагагүй, зөвхөн шинэ класс нэмнэ.
L – Liskov Substitution Principle (Лисковын орлуулалтын зарчим)
Дэд класс нь үндсэн классийн бүх функцын оронд ашиглагдах ёстой.
Жишээ (зөв ба буруу хэрэглээ):
class Bird { fly() { console.log("Flying"); } }
class Sparrow extends Bird {}
class Penguin extends Bird {
fly() { throw new Error("Can't fly"); } // LSP зөрчигдсөн
}
PenguinньBird-ийн оронд ашиглагдах ёстой, нисэх функцийг алгасаж болохгүй.
I – Interface Segregation Principle (Интерфэйсийн салгах зарчим)
Том интерфэйсийг олон жижиг интерфэйст хуваах ёстой.
Жишээ:
interface Printable { print(): void; }
interface Scannable { scan(): void; }
class MultiFunctionPrinter implements Printable, Scannable {
print() { console.log("Printing..."); }
scan() { console.log("Scanning..."); }
}
- Том интерфэйсийг жижиг, тусдаа интерфэйс болгон салгасан.
D – Dependency Inversion Principle (Хамаарлын урвуулах зарчим)
Дээд түвшний модуль доод түвшний модульд хамаарахгүй, харин интерфэйсээр дамжуулан хамаарна.
Жишээ:
interface PaymentProcessor { pay(amount: number): void; }
class Paypal implements PaymentProcessor {
pay(amount: number) { console.log(`Paid ${amount} via Paypal`); }
}
class PaymentService {
constructor(private processor: PaymentProcessor) {}
makePayment(amount: number) { this.processor.pay(amount); }
}
PaymentServiceньPaypal-д шууд хамаарахгүй, интерфэйсээр дамжуулж ажиллана.
Эдгээр зарчмуудыг баримтлах нь кодыг урт хугацаанд засварлах, шинээр нэмэх, дахин ашиглахад хялбар болгож, алдааг багасгана.