Trong cơ sở mã Java của chúng tôi, tôi tiếp tục thấy mẫu sau:
/**
This is a stateless utility class
that groups useful foo-related operations, often with side effects.
*/
public class FooUtil {
public int foo(...) {...}
public void bar(...) {...}
}
/**
This class does applied foo-related things.
*/
class FooSomething {
int DoBusinessWithFoo(FooUtil fooUtil, ...) {
if (fooUtil.foo(...)) fooUtil.bar(...);
}
}
Điều làm phiền tôi là tôi phải vượt qua một ví dụ FooUtil
ở khắp mọi nơi, bởi vì thử nghiệm.
- Tôi không thể làm cho
FooUtil
các phương thức tĩnh, vì tôi sẽ không thể chế nhạo chúng để thử nghiệm cả haiFooUtil
và các lớp máy khách của nó. - Tôi không thể tạo một ví dụ
FooUtil
tại nơi tiêu thụ với mộtnew
lần nữa vì tôi sẽ không thể chế giễu nó để thử nghiệm.
Tôi cho rằng đặt cược tốt nhất của tôi là sử dụng thuốc tiêm (và tôi cũng vậy), nhưng nó bổ sung thêm những rắc rối riêng. Ngoài ra, việc truyền một số trường hợp sử dụng làm tăng kích thước của danh sách tham số phương thức.
Có cách nào để xử lý việc này tốt hơn mà tôi không thấy?
Cập nhật: vì các lớp tiện ích là không trạng thái, tôi có thể có thể thêm một INSTANCE
thành viên singleton tĩnh hoặc getInstance()
phương thức tĩnh , trong khi vẫn giữ khả năng cập nhật trường tĩnh bên dưới của lớp để kiểm tra. Không có vẻ siêu sạch, quá.
FooUtil
phương thức nên được đưa vào FooSomething
, có thể có các thuộc tính FooSomething
cần được thay đổi / mở rộng để các FooUtil
phương thức không còn cần thiết nữa. Xin vui lòng cho chúng tôi một ví dụ cụ thể hơn về những gì FooSomething
giúp chúng tôi cung cấp một câu trả lời tốt cho câu hỏi này.