fbpx

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-д шууд хамаарахгүй, интерфэйсээр дамжуулж ажиллана.

Эдгээр зарчмуудыг баримтлах нь кодыг урт хугацаанд засварлах, шинээр нэмэх, дахин ашиглахад хялбар болгож, алдааг багасгана.

Leave a Reply