Tôi giả sử bạn đang nói về chỉ đọc tài sản, hoặc tại khách sạn ít nhất thu khí , kể từ khi một tài sản setter là, trong hầu hết mọi trường hợp, sẽ có tác dụng phụ. Nếu không thì nó không hữu ích lắm.
Nói chung, một thiết kế tốt theo nguyên tắc ít bất ngờ nhất . Đừng làm những việc mà người gọi không mong đợi bạn làm, đặc biệt là nếu những điều đó có thể thay đổi kết quả trong tương lai .
Nói chung , điều đó có nghĩa là các thuộc tính getters không nên có tác dụng phụ.
Tuy nhiên , chúng ta hãy cẩn thận về ý nghĩa của "tác dụng phụ".
Một tác dụng phụ là, về mặt kỹ thuật, bất kỳ sửa đổi của nhà nước. Đó có thể là trạng thái có thể truy cập công khai hoặc ... nó có thể là trạng thái hoàn toàn riêng tư.
Bộ tải lười / trì hoãn là một ví dụ về trạng thái gần như chỉ riêng tư. Miễn là trách nhiệm của người gọi không phải giải phóng tài nguyên đó, thì bạn thực sự đang giảm bớt sự bất ngờ và sự phức tạp nói chung bằng cách sử dụng khởi tạo hoãn lại. Một người gọi thường không mong muốn phải báo hiệu rõ ràng việc khởi tạo cấu trúc bên trong . Vì vậy, lười khởi tạo không vi phạm nguyên tắc trên.
Một ví dụ khác là một tài sản đồng bộ. Để một phương thức được an toàn cho luồng, nó thường sẽ phải được bảo vệ bởi phần quan trọng hoặc mutex. Bước vào một phần quan trọng hoặc có được một mutex là một tác dụng phụ; bạn đang sửa đổi nhà nước, thường là nhà nước toàn cầu . Tuy nhiên, tác dụng phụ này là cần thiết để ngăn chặn một loại bất ngờ tồi tệ hơn nhiều - sự bất ngờ của dữ liệu bị sửa đổi (hoặc tệ hơn, được sửa đổi một phần) bởi một luồng khác.
Vì vậy, tôi sẽ nới lỏng một chút hạn chế sau đây: Việc đọc thuộc tính không được có tác dụng phụ có thể nhìn thấy hoặc tác dụng phụ làm thay đổi ngữ nghĩa của chúng .
Nếu không có cách nào khả thi để người gọi bị ảnh hưởng, hoặc thậm chí nhận thức được tác dụng phụ, thì tác dụng phụ đó không gây hại gì. Nếu bạn không thể viết một bài kiểm tra để xác minh sự tồn tại của một hiệu ứng phụ cụ thể, thì nó đủ bản địa hóa để gắn nhãn là một chi tiết thực hiện riêng tư, và do đó không có mối quan tâm chính đáng nào với thế giới bên ngoài.
Nhưng hãy cẩn thận; như một quy tắc tự nhiên, bạn nên cố gắng tránh các tác dụng phụ, bởi vì thường thì những gì bạn có thể nghĩ là một chi tiết thực hiện riêng tư có thể bất ngờ bị rò rỉ và trở nên công khai.