Các đồng nghiệp của tôi nói với tôi rằng nên có ít logic nhất có thể trong getters và setters.
Tuy nhiên, tôi tin chắc rằng rất nhiều thứ có thể được ẩn trong getters và setters để bảo vệ người dùng / lập trình viên khỏi các chi tiết triển khai.
Một ví dụ về những gì tôi làm:
public List<Stuff> getStuff()
{
if (stuff == null || cacheInvalid())
{
stuff = getStuffFromDatabase();
}
return stuff;
}
Một ví dụ về cách công việc bảo tôi làm mọi việc (họ trích dẫn 'Mã sạch' từ chú Bob):
public List<Stuff> getStuff()
{
return stuff;
}
public void loadStuff()
{
stuff = getStuffFromDatabase();
}
Bao nhiêu logic là thích hợp trong một setter / getter? Việc sử dụng getters và setters trống là gì ngoại trừ vi phạm ẩn dữ liệu?
public List<Stuff> getStuff() { return stuff; }
StuffGetter
giao diện, thực hiện một StuffComputer
phép tính và bọc nó bên trong một đối tượng StuffCacher
, chịu trách nhiệm truy cập bộ đệm hoặc chuyển tiếp các cuộc gọi đến StuffComputer
nó.