Consider this C# code:

4 phương ánCó giải thích
Đề bài
public class FileLogger
{
   public void Log(string message)
     => Console.WriteLine(message);
}

public class OrderService
{
   private FileLogger logger = new FileLogger();
}

Which principle is violated here?

Các phương án trả lời

Chọn một phương án
Lời giảiChọn phương án để mở
Đáp án đúng: "Dependency Inversion Principle". OrderService tự khởi tạo một FileLogger cụ thể bằng new, nghĩa là mô-đun cấp cao phụ thuộc trực tiếp vào lớp hiện thực cấp thấp thay vì vào một trừu tượng như ILogger. Đó chính là vi phạm Nguyên lý Đảo ngược Phụ thuộc; cách sửa là khai báo interface ILogger, cho OrderService nhận nó qua constructor và để DI container cung cấp. Trách nhiệm của OrderService vẫn đơn nhất nên chưa vi phạm SRP ("Single Responsibility Principle"); không có chỗ nào phải sửa mã cũ để mở rộng nên chưa động tới OCP ("Open/Closed Principle"); và cũng không có interface phình to nào để nói tới ISP ("Interface Segregation Principle").

Cùng chương 3

Xuất hiện trong 1 bộ đề