Gần đây tôi đã thực hiện tái cấu trúc một dự án có kích thước trung bình trong Java để quay lại và thêm các bài kiểm tra đơn vị. Khi tôi nhận ra một nỗi đau là gì khi chế nhạo những người độc thân và thống kê, cuối cùng tôi đã "hiểu" những gì tôi đã đọc về họ suốt thời gian này. (Tôi là một trong những người cần học hỏi kinh nghiệm. Ồ tốt.)
Vì vậy, bây giờ khi tôi đang sử dụng Spring để tạo các đối tượng và nối chúng xung quanh, tôi sẽ loại bỏ các static
từ khóa trái và phải. (Nếu tôi có khả năng muốn chế giễu nó, thì nó không thực sự tĩnh theo nghĩa tương tự như Math.abs () phải không?) Điều này là, tôi đã có thói quen sử dụng static
để biểu thị rằng một phương pháp không dựa vào trên bất kỳ trạng thái đối tượng. Ví dụ:
//Before
import com.thirdparty.ThirdPartyLibrary.Thingy;
public class ThirdPartyLibraryWrapper {
public static Thingy newThingy(InputType input) {
new Thingy.Builder().withInput(input).alwaysFrobnicate().build();
}
}
//called as...
ThirdPartyLibraryWrapper.newThingy(input);
//After
public class ThirdPartyFactory {
public Thingy newThingy(InputType input) {
new Thingy.Builder().withInput(input).alwaysFrobnicate().build();
}
}
//called as...
thirdPartyFactoryInstance.newThingy(input);
Vì vậy, đây là nơi mà nó trở nên nhạy cảm. Tôi thích cách cũ bởi vì chữ in hoa đã nói với tôi rằng, giống như Math.sin (x), ThirdPartyL LibraryWrapper.newT Breathy (x) luôn làm điều tương tự theo cách tương tự. Không có trạng thái đối tượng để thay đổi cách đối tượng thực hiện những gì tôi yêu cầu nó làm. Dưới đây là một số câu trả lời có thể tôi đang xem xét.
- Không ai khác cảm thấy như vậy nên có gì đó không ổn với tôi. Có lẽ tôi chưa thực sự nội tâm hóa cách làm OO! Có thể tôi đang viết bằng Java nhưng suy nghĩ bằng FORTRAN hoặc somesuch. (Điều này sẽ rất ấn tượng vì tôi chưa bao giờ viết FORTRAN.)
- Có lẽ tôi đang sử dụng tính tĩnh như một loại proxy cho tính bất biến cho mục đích suy luận về mã. Điều đó đang được nói, tôi nên có manh mối gì trong mã của mình cho ai đó đi cùng để duy trì nó để biết những gì trạng thái và những gì không?
- Có lẽ điều này chỉ nên đến miễn phí nếu tôi chọn ẩn dụ đối tượng tốt? ví dụ
thingyWrapper
không có vẻ như nó có trạng thái độc lập với vỏ bọcThingy
mà bản thân nó có thể thay đổi. Tương tự, mộtthingyFactory
âm thanh giống như nó là bất biến nhưng có thể có các chiến lược khác nhau được lựa chọn trong lúc sáng tạo.