Getters và setters chỉ là phương pháp. Họ làm gì? Họ thay đổi một lĩnh vực thành một tài sản, và đó là một sự khác biệt quan trọng.
Trường là một chút dữ liệu, trạng thái, trong đối tượng. Thuộc tính là một đặc tính quan sát được bên ngoài, một phần của hợp đồng của đối tượng. Phun ruột của một vật thể khắp nơi, cho dù trực tiếp hoặc thông qua getters/setters, luôn luôn là một ý tưởng tồi. Thiết kế kém. Nhưng nâng cao điều đó đến mức nói rằng getters và setters luôn xấu? Đó chỉ là một vài lập trình viên nghèo nàn mà không có cảm giác thích thú khi tuyên bố rằng quy tắc ngón tay cái mơ hồ (mà họ không thực sự hiểu ngay từ đầu) là luật gang.
Cá nhân, tôi có xu hướng cố gắng giữ tài sản như những thứ không thay đổi bất ngờ bên dưới chân của khách hàng. (Khách hàng của lớp đó là.) Các thuộc tính duy nhất mà tôi sẽ thay đổi động là những thuộc tính mà chúng không thể viết, và thậm chí sau đó tôi sẽ cố gắng tránh nó. Tôi cảm thấy rằng các thuộc tính có nhiều cách để kiểm soát hành vi của cá thể được thiết lập bởi máy khách, chứ không phải những thứ tùy ý dưới sự kiểm soát của lớp. (Đó là lĩnh vực bình thường dành cho ...)
Nguồn
2010-05-01 18:48:42
Hãy xem http://stackoverflow.com/questions/565095/java-are-getters-and-setters-evil và câu trả lời được chấp nhận. –
Bài viết thú vị nhưng -1 khi bài viết giải thích câu trả lời cho câu hỏi của bạn. –
Đọc liên quan: http://c2.com/cgi/wiki?AccessorsAreEvil, http://c2.com/cgi/wiki?ForgetAboutWritingAccessors, http://c2.com/cgi/wiki?TellDontAsk – Seth