Câu hỏi trắc nghiệmAdvanced Cross-Platform Application Programming With .NET - Lập trình ứng dụng đa nền tảng nâng cao với .NETPRN222 - Chương 3: Dependency Injection và IoC
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).