Cũng có khá nhiều tranh luận có nên đóng gói hay không đóng gói. Rõ ràng với code không đóng gói, sẽ nhanh hơn, dễ hiểu hơn, trong sáng hơn, nhất là debug thì public nó show hàng lồ lộ ra, thích hơn hẳn ^^, rồi serialize/deserialize nữa, dễ hơn rất nhiều.
Một số trường hợp cần đóng gói như:
- Cần thêm logic (validation) cho thuộc tính (khỏi code nhé, lấy cái ví dụ acc kiểm tra tiền bẩn)
- Lazy load thuộc tính
private string _password;
private string Password
{
get
{
if (_password == null)
{
_password = CallExpensiveOperation();
}
return _password;
}
}
- Sử dụng DI (injection) để có thể sử dụng các GLOBAL variable dùng trong class, ví dụ như mình cần cái connection kết nối db dùng trong gateway.
private Connection _conn;
void setConnection(Connection conn) {_conn= conn}
mình inject chứ không khai báo
public Connection _conn = Blabla.getConnection();
Injection giúp trong việc làm TDD, vì mình hoàn toàn có thể cho một conn mock (là một conn luôn đúng), chứ nếu cho conn thật, nhỡ nó fail thì cả cái class của mình fail hết à.