Gần đây đã có một số cuộc cách mạng chống lại những người độc thân, nhưng có điều gì sai trái với họ nếu họ không quốc tịch?
Tôi biết cuộc nói chuyện quá lạm dụng và tất cả ... điều này áp dụng cho tất cả mọi thứ không chỉ riêng người độc thân.
Gần đây đã có một số cuộc cách mạng chống lại những người độc thân, nhưng có điều gì sai trái với họ nếu họ không quốc tịch?
Tôi biết cuộc nói chuyện quá lạm dụng và tất cả ... điều này áp dụng cho tất cả mọi thứ không chỉ riêng người độc thân.
Câu trả lời:
> Are immutable/stateless singletons bad?
Để biết thêm chi tiết, xem kiến trúc hành tây
Tôi không thấy những lý do khác tại sao không sử dụng Singletons.
Nó luôn luôn phụ thuộc vào việc sử dụng. Tôi nghĩ rằng cuộc cách mạng xuất phát từ thực tế, rằng tất cả các lập trình viên học mô hình này là các mô hình hướng đối tượng. Hầu hết quên suy nghĩ về nơi nó có ý nghĩa và nơi nó không.
Tất nhiên, điều này đúng với mọi mẫu. Chỉ bằng cách sử dụng các mẫu bạn không tạo mã tốt hoặc phần mềm tốt.
Nếu bạn có một singleton không trạng thái, tại sao không sử dụng một lớp chỉ cung cấp các phương thức tĩnh (hoặc sử dụng một lớp tĩnh)?
Ở đây một số bài viết liên quan đến các biến toàn cầu và singletons nói chung.
Tôi sẽ không nghiêm khắc như tác giả nhưng anh ấy cho thấy rằng trong hầu hết các trường hợp bạn nghĩ rằng bạn cần một người độc thân, bạn không thực sự cần nó.
Không có gì một singleton không trạng thái bất biến có thể làm điều đó mà một lớp tĩnh không thể.
Đơn giản là không có lý do để thêm mức độ phức tạp thêm mà -> Instance () tạo ra, trong khi cuộc gọi đơn giản đến một phương thức tĩnh sẽ rõ ràng hơn, bảo thủ hơn về tài nguyên và có thể nhanh hơn.
Không phải họ sai. Đó là một cách tốt hơn để làm điều đó. Có những kịch bản mà những người độc thân bình thường ("nhà nước") là cách đúng đắn để đi. Cái ác với singleton là chúng thường bị lạm dụng, có kết quả xấu tương tự như các biến toàn cục, nhưng có những trường hợp cụ thể khi sử dụng singleton đơn giản là chính xác. Không có trường hợp như vậy cho những người không quốc tịch.
Vấn đề chính với singleton là nó che giấu các phụ thuộc và khớp nối đặc biệt khi được sử dụng trong kịch bản mối quan tâm xuyên suốt. Xem Singletons là những kẻ nói dối bệnh lý hoặc Tại sao Singletons là Evil để đọc thêm.
Từ phía bên kia, một tiểu bang ít độc thân, nếu không bị lạm dụng, có thể hữu ích và cải thiện hiệu suất. Hãy xem xét một ví dụ:
interface Interface
{
void Method();
}
class StatelessSingleton : Interface
{
public static readonly StatelessSingleton Instance = new StatelessSingleton();
private StatelessSingleton() { }
public void Method() { }
}
class User
{
public User(Interface i) { /* ... */ }
}
Ở đây, StatlessSingleton đóng vai trò là cài đặt mặc định của Giao diện và được đưa vào hàm tạo của Người dùng. Không có khớp nối mã hóa cứng và ẩn phụ thuộc. Chúng tôi không thể sử dụng một lớp tĩnh do giao diện bên dưới nhưng không có lý do gì để tạo nhiều hơn một phiên bản mặc định. Đó là lý do tại sao một người độc thân không quốc tịch dường như là một lựa chọn thích hợp.
Tuy nhiên, có lẽ chúng ta nên sử dụng một mẫu khác để triển khai mặc định:
class Implementation : Interface
{
private readonly Action _method;
public Implementation()
{
_method = new Action(() => { /* default */ });
}
public Implementation(Action custom)
{
_method = custom;
}
public void Method()
{
_method();
}
}
Nó đạt hiệu suất liên quan đến StatlessSingleton nhưng cấu thành một triển khai chung của Giao diện. Giải pháp tương tự được sử dụng bởi giao diện IProTHER .
Một lần nữa, tại sao cho phép tạo nhiều hơn một thực hiện hành vi mặc định? Tuy nhiên, chúng ta có thể kết hợp cả hai:
class Implementation : Interface
{
public readonly Implementation Default = new Implementation();
private readonly Action _method;
private Implementation()
{
_method = new Action(() => { /* default */ });
}
public Implementation(Action custom)
{
_method = custom;
}
public void Method()
{
_method();
}
}
Để kết luận, tôi tin rằng có những nơi (như mặc định được mô tả) nơi Singletons hữu ích. Định nghĩa chính của Singleton nói rằng nó không cho phép tạo nhiều hơn một thể hiện của một lớp. Đó là năng lượng hạt nhân. Có thể tạo ra một năng lượng hoặc một quả bom. Nó phụ thuộc vào con người.