Những ưu điểm và nhược điểm của việc sử dụng Service Locator so với singleton là gì? Tôi đã đọc rằng các đơn là xấu nhưng tôi tự hỏi nếu s Service Locator nói chung là một cách tốt hơn để làm việc.Singleton Vs ServiceLocator
6
A
Trả lời
9
Cả hai cách tiếp cận đều xấu vì không rõ ràng từ hợp đồng lớp là 'phụ thuộc của nó. Đó là,
private void foo()
{
var x = SomeSingleton.Instance.GetX();
var y = ServiceLocator.GetService<IProvider>().GetY();
}
có tham chiếu đến SomeSingleton
và IProvider
chôn sâu ở đâu đó bên trong.
Tuy nhiên, so với cách tiếp cận đơn thuần, định vị dịch vụ thường tốt hơn ở chỗ chúng cho phép cấu hình tập trung đơn giản hơn, quản lý lâu dài, v.v. Chúng cũng cho phép kiểm tra tốt hơn (bạn luôn có thể gọi đến GetService<T>
) , tách mối quan tâm, v.v.
0
nếu khả năng kiểm tra là một mối quan ngại, sử dụng trình định vị dịch vụ tốt hơn nhiều so với trình đơn thuần túy.
Các vấn đề liên quan
- 1. zf2 ServiceManager vs ServiceLocator
- 2. Lớp tĩnh vs Singleton
- 3. Singleton Instance vs Class Methods
- 4. PHP: Singleton vs tĩnh Lớp
- 5. Singleton vs Static Preference and Defect
- 6. ServiceLocator và Mở/Đóng Nguyên tắc
- 7. Thử nghiệm đơn vị với ServiceLocator
- 8. Khi nào sử dụng Singleton vs Transient vs Request sử dụng Ninject và MongoDB
- 9. Spring ServiceLocator hoặc mô hình nhà máy tinh khiết?
- 10. Cache Singleton hoặc Instance?
- 11. Java Singleton vs static - có lợi ích thực sự thực sự không?
- 12. HttpCache vs Singleton - Thực tiễn tốt nhất cho ứng dụng MVC
- 13. Một singleton chung
- 14. lớp tĩnh và singleton
- 15. tiêm tên Guice singleton
- 16. Tìm đậu singleton stateful
- 17. Thừa kế Singleton
- 18. Ninject mỗi phiên singleton?
- 19. Một singleton đơn giản
- 20. Unity Singleton Code
- 21. ApplicationDelegate Singleton iphone
- 22. Mẫu Singleton trong C++
- 23. Java Singleton Pattern
- 24. singleton trong ExtJs4
- 25. Đời của một Singleton
- 26. Singleton trong iOS 5?
- 27. Singleton với multithreads
- 28. PHP Singleton PDO
- 29. Singleton Class trong Flex
- 30. Singleton pattern trong vb
Tôi sẽ đi xa đến mức xem xét cả hai mẫu chống nhưng tôi đồng ý rằng Công cụ định vị dịch vụ thuận lợi hơn một chút. Giải pháp tốt nhất là triển khai Dependency Injection. –
từ những gì tôi hiểu từ DI, nó sẽ không yêu cầu tất cả các đối tượng được sử dụng để truy cập vào singleton trực tiếp để có một tham chiếu đến đối tượng exleton singleton? – djcouchycouch
Có, bạn cần phải cung cấp cho chúng như là các tham số cho hàm tạo (nếu bạn sử dụng phép xây dựng, điều này thường được gọi là "Khai báo các phụ thuộc của bạn"). Để giảm bớt mọi thứ một chút, bạn có thể sử dụng hộp chứa Inversion of Control. Hãy xem Google Guice. –