Lý lịch
Tôi đang đọc "Sách mã sạch", và, song song, tôi đang làm việc trên các đối tượng nhiệt trị Kata như tài khoản ngân hàng, và tôi bị mắc kẹt theo quy tắc đó:
Quy tắc thứ 9 của các đối tượng calisthenic là chúng ta không sử dụng getter hoặc setters.
Có vẻ khá vui, và tôi đồng ý với nguyên tắc này. Hơn nữa, tại trang 98-99 của Clean Code, tác giả giải thích rằng getters / setters phá vỡ sự trừu tượng hóa và chúng ta không phải hỏi đối tượng của mình, nhưng chúng ta phải nói với đối tượng của mình.
Điều này có ý nghĩa hoàn hảo trong tâm trí của tôi, và tôi hoàn toàn đồng ý với nguyên tắc này. Vấn đề đến trong thực tế.
Bối cảnh
Ví dụ: tôi đang có một ứng dụng mà tôi phải liệt kê một số người dùng và để hiển thị chi tiết người dùng.
Người dùng của tôi gồm có:
-> Name
--> Firstname --> String
--> Lastname --> String
-> PostalAddress
--> Street --> String
--> PostalCode --> String
Vấn đề
Tôi có thể làm như thế nào hoặc tôi có thể làm gì để tránh getters khi tôi chỉ cần hiển thị một thông tin đơn giản ( và tôi phải xác nhận rằng tôi không cần thao tác thêm trên trường cụ thể đó ) để hiển thị giá trị Firstname một cách đơn giản ( ngẫu nhiên) hỗ trợ đầu ra?
Những gì xuất hiện trong tâm trí của tôi
Một giải pháp là thực hiện:
user.getName().getFirstName().getStringValue()
Điều này là hoàn toàn khủng khiếp, phá vỡ nhiều quy tắc của các vật thể nhiệt trị và phá vỡ Luật Demeter.
Một số khác sẽ là một cái gì đó như:
String firstName = user.provideFirstnameForOutput();
// That would have called in the user object =>
String firstName = name.provideFirstnameForOutput();
// That would have called in the name object =>
String firstName = firstname.provideFirstnameForOutput();
Nhưng tôi không cảm thấy thoải mái với giải pháp này, đó dường như chỉ là một "người truy cập bậc cao" như bỏ qua getter / setter tiêu chuẩn với một phương pháp chỉ nhằm phù hợp với luật Demeter ...
Bất kỳ ý tưởng ?