Trong các năm lập trình của tôi, tôi thường tạo các lớp chỉ đơn giản là nhóm một vài biến với bộ định vị và getters của chúng. Tôi đã thấy các loại đối tượng này được gọi là đối tượng giá trị, đối tượng miền hoặc đối tượng mô hình tùy thuộc vào ngữ cảnh mà chúng được sử dụng. Thuật ngữ phù hợp nhất để sử dụng chung có vẻ là đối tượng chuyển dữ liệu (DTO). Điều này mô tả POJO chỉ chứa trình truy cập và trình tắt.Các trường công cộng trong một đối tượng truyền dữ liệu
Tôi vừa viết một đối tượng như vậy chứa khoảng năm mươi trường được sử dụng để đặt thông số chủ đề trên biểu đồ. Bây giờ tôi tự hỏi nếu thay vì tạo ra một trăm getters và setters tôi chỉ cần khai báo các lĩnh vực này là công cộng. Làm như vậy đi ngược lại tất cả mọi thứ bản năng lập trình của tôi cho tôi biết nhưng tôi không thể phủ nhận rằng nó sẽ làm tăng đáng kể khả năng đọc mã của tôi và giảm số lượng mã boilerplate trong lớp.
Lý do duy nhất tôi có thể thấy không để sử dụng các trường công khai sẽ là nếu tôi cần thực hiện bất kỳ loại xác thực nào trên các trường này. Nếu chúng ta giả định rằng xác nhận kiểu là đủ cho các mục đích của tôi, thì việc sử dụng các trường công khai trong kịch bản này có thể chấp nhận được từ thiết kế hướng đối tượng không? Liệu một DTO công khai sẽ hoạt động tốt hơn trong các hoạt động hàng loạt lớn?
có thể trùng lặp - http://stackoverflow.com/questions/1568091/why-use-getters-and-setters – sanbhat
Getters và setters được yêu cầu nếu bạn cố gắng sử dụng các khung 'DI' như' Spring' hoặc một cái gì đó như 'jsp: useBean' etc !!! – NINCOMPOOP
@sanbhat: một số lý do được đưa ra trong câu trả lời được chấp nhận cho câu hỏi đó áp dụng ở đây nhưng không phải tất cả. Phạm vi và hành vi của DTO khác với một lớp chung vì vậy tôi đã tự hỏi nếu "quy tắc" khác nhau sẽ áp dụng ở đây. – Lilienthal