Gần đây tôi đã đi qua mô hình thiết kế đối tượng Null và các đồng nghiệp của tôi nói rằng nó có thể được sử dụng để làm đi với các kiểm tra con trỏ null được gặp trong suốt mã.Mô hình đối tượng đơn giản để tránh kiểm tra Null?
ví dụ: giả sử lớp DAO trả về thông tin về Khách hàng (trong đối tượng giá trị được gọi là CustomerVO). Lớp chính của tôi là nghĩa vụ phải trích xuất firstName và emailId và gửi email cho khách hàng.
...
CustomerVO custVO = CustomerDAO.getCustomer(customerID);
if(custVO != null) { // imp, otherwise we may get null ptr exception in next line
sendEmail(custVO.getFirstName(), custVO.getEmailID());
}
...
Đây là ví dụ rất đơn giản, nhưng việc kiểm tra rỗng có thể nhanh chóng lan truyền khắp mã của bạn dựa trên độ phức tạp của các đối tượng giá trị.
Tôi có hai vấn đề với kiểm tra null, - họ có xu hướng làm cho mã khó đọc và khó đọc - nhà phát triển có kinh nghiệm thấp hơn đặt kiểm tra không cần thiết khi thực tế họ phải ném ngoại lệ. ví dụ: ở trên mã, nó sẽ là tốt hơn để ném ngoại lệ từ getCustomer() chính nó bởi vì nếu nó không thể tìm thấy thông tin khách hàng cho CustID đã cho, nó chỉ ra CustID không hợp lệ.
okay, quay lại mẫu đối tượng rỗng, chúng tôi có thể sử dụng đối tượng CustomerVO 'null' để ẩn kiểm tra không?
CustomerVO {
String firstName = "";
String emailID = "";
}
Không có ý nghĩa. bạn nghĩ sao?
Và những điều bạn làm theo để giảm thiểu kiểm tra không có trong ứng dụng của bạn là gì.
+1, mặc dù tôi không muốn khách hàng của tôi có phương thức sendEmail.Điều đó chỉ mang lại cho một lớp khách hàng quá nhiều trách nhiệm. Nó giống như cho mọi lớp một phương thức "in" và bây giờ phải thực hiện logic in ở mọi nơi hoặc làm cho mọi lớp phụ thuộc vào một số trình quản lý in, trong khi nó có thể bị hạn chế đối với trình quản lý in và các biểu mẫu/lớp thực sự bắt đầu in. các lớp cần in. Trường hợp mẫu rỗng thực sự tốt đẹp, là trong thử nghiệm đơn vị ví dụ để cung cấp một lớp đăng nhập mà không làm bất cứ điều gì, do đó bạn không cần phải mã hóa mã đang được thử nghiệm. –