Tôi hiện đang nghĩ về một giao diện cho một lớp tôi đang viết. Lớp này chứa các kiểu cho một ký tự, ví dụ: cho dù ký tự đó được in đậm, in nghiêng, gạch chân, v.v. Tôi đã tranh luận với chính mình trong hai ngày liệu tôi có nên sử dụng getters / setters hoặc tên logic cho các phương thức thay đổi giá trị thành những phong cách này. Mặc dù tôi có xu hướng thích các tên logic, nhưng điều đó có nghĩa là viết mã không hiệu quả và không logic. Tôi sẽ cho bạn một ví dụ.
Tôi đã có một lớp CharacterStyles
mà có các biến thành viên bold
, italic
, underline
(và một số người khác, nhưng tôi sẽ rời chúng ra để giữ cho nó đơn giản). Cách dễ nhất để cho phép các phần khác của chương trình truy cập vào các biến này, là viết các phương thức getter / setter, để bạn có thể làm styles.setBold(true)
và styles.setItalic(false)
.
Nhưng tôi không thích điều này. Không chỉ bởi vì nhiều người nói rằng getters / setters phá vỡ sự đóng gói (nó thực sự tệ đến vậy sao?), Mà chủ yếu là vì nó có vẻ không hợp lý với tôi. Tôi hy vọng sẽ tạo kiểu cho một nhân vật thông qua một phương thức, styles.format("bold", true)
hoặc một cái gì đó tương tự, nhưng không phải thông qua tất cả các phương thức này.
Dù vậy vẫn có một vấn đề. Vì bạn không thể truy cập biến thành viên đối tượng theo nội dung của chuỗi trong C ++, tôi sẽ phải viết một thùng chứa if-statement / switch lớn cho tất cả các kiểu hoặc tôi sẽ phải lưu trữ các kiểu trong một mảng kết hợp ( bản đồ).
Tôi không thể tìm ra cách tốt nhất là gì. Một khoảnh khắc tôi nghĩ rằng tôi nên viết getters / setters, và khoảnh khắc tiếp theo tôi nghiêng về phía khác. Câu hỏi của tôi là: bạn sẽ làm gì? Và tại sao bạn lại làm vậy?
bold
được đặt thành true
và các biến khác không được xác định, các phương thức getter cho các biến khác sẽ trả về giá trị của kiểu cha (được lưu trữ trong thuộc tính khác), trong khi getter cho thuộc bold
tính sẽ trả về true
. Có một số thứ khác như tên và cách nó cũng được hiển thị trong giao diện.