Bạn dường như gợi ý rằng độ phức tạp của một giao diện được đo bằng số lượng phần tử mà nó có (phương thức, trong trường hợp này). Nhiều người sẽ lập luận rằng phải nhớ rằng charge
phương thức này có thể được sử dụng để trả về số dư của một Client
sự phức tạp hơn nhiều so với việc có thêm phần tử phụ của getBalance
phương thức. Làm cho mọi thứ rõ ràng hơn đơn giản hơn nhiều, đặc biệt là đến mức nó không để lại sự mơ hồ, bất kể số lượng phần tử cao hơn trong giao diện.
Bên cạnh đó, việc gọi charge(0)
vi phạm nguyên tắc ít gây ngạc nhiên nhất , còn được gọi là số liệu WTF mỗi phút (từ Clean Code, hình ảnh bên dưới), gây khó khăn cho các thành viên mới của nhóm (hoặc những người hiện tại, sau một thời gian rời xa mã) họ hiểu rằng cuộc gọi thực sự được sử dụng để lấy số dư. Hãy nghĩ về cách các độc giả khác sẽ phản ứng:
Ngoài ra, chữ ký của charge
phương thức đi ngược lại các hướng dẫn thực hiện một và chỉ một điều và tách biệt truy vấn lệnh , bởi vì nó làm cho đối tượng thay đổi trạng thái của nó trong khi cũng trả về một giá trị mới.
Nói chung, tôi tin rằng giao diện đơn giản nhất trong trường hợp này sẽ là:
public class Client {
private float bal;
float getBalance() { return bal; }
void charge(float c) { bal -= c; }
}