Gần đây tôi đã bị ném vào một dự án ứng dụng web Java và tôi đã bắt gặp một số lớp theo định dạng này:
public class MyThingy {
private final int p1;
private final String p2;
…
public MyThingy (int p1, String p2, …) {
this.p1 = p1;
this.p2 = p2;
…
}
public static void doSomething(int p1, String p2, …) throws Throwable {
final MyThingy myThingy = new MyThingy(p1, p2, …);
myThingy.execute();
}
private void execute() throws Throwable {
//do stuff
}
}
Có vẻ như điều này có thể được thực hiện với đoạn mã sau, mà theo tôi có vẻ dễ đọc hơn.
public class MyThingy {
public static void doSomething (int p1, String p2, …) throws Throwable {
//do stuff
}
}
Lợi ích duy nhất có thể tôi có thể thấy khi thực hiện theo cách đầu tiên, là nếu bạn phải chia nhỏ tệp thực thi () thành các phần nhỏ hơn, tất cả chúng có thể chia sẻ các tham số ban đầu mà không cần phải vượt qua chúng một cách rõ ràng. Nhưng điều này có thể chỉ có lợi cho bộ mã hóa lười biếng, vì người đọc trở nên khó khăn trong việc cho biết phương thức nào cần tham số nào và khi nào các giá trị có thể được thay đổi (gần giống với các biến toàn cục.)
Có thiếu điều gì không? Luồng, hiệu suất?
Chỉnh sửa: Tôi nên đã đề cập, mặc dù các nhà xây dựng là công khai, nó không được gọi. Cách sử dụng duy nhất là như thế này:
MyThingy.doSomething(p1, p2...);
Ngoài ra, bản thân nó cũng có vấn đề khi thử nghiệm, tôi không thể thấy bất kỳ lý do nào để không đưa logic thực thi () trực tiếp vào doS Something (). Ngay cả khi chúng ta đã loại bỏ hàm tĩnh, thì hàm tạo vẫn không có ý nghĩa với tôi; Tôi nghĩ rằng các tham số nên được truyền trực tiếp đến phương thức sẽ sử dụng chúng.
throws Throwable
là một thực tiễn xấu, nó nên ít nhất throws Exception
, hoặc một cái gì đó cụ thể hơn, nếu có thể. Và, vì các thực tiễn xấu thường đi cùng nhau, tôi muốn nói rằng mẫu mã này chỉ là một thực tiễn xấu khác.
new(...)
+ execute()
trong một cuộc gọi.
final
). Phương thức tĩnh là API duy nhất vào đối tượng vì tất cả các thành viên là riêng tư. Chỉ trong mã bạn đã chia sẻ, tôi không thấy bất kỳ lợi ích nào cho việc này khi tạo execute
phương thức tĩnh lấy p1, p2, ....