Consider this C# code:public class FileLogger { public void Log(string message) => Console.WriteLine(message); } public class OrderService { private FileLogger logger = new FileLogger(); } Which principle is violated here?

4 phương ánCó lời giảiXuất hiện trong 1 bộ đề

A·B·C·DCác phương án trả lời

ASingle Responsibility Principle
BOpen/Closed Principle
Dependency Inversion PrincipleĐúng
DInterface Segregation Principle

Giải thích chi tiết

Đáp án đúng: C. 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 (A); không có chỗ nào phải sửa mã cũ để mở rộng nên chưa động tới OCP (B); và cũng không có interface phình to nào để nói tới ISP (D).

Xuất hiện trong các bộ đề