हमारे जावा कोडबेस में मैं निम्नलिखित पैटर्न देखता हूं:
/**
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(...);
}
}
मुझे परेशान करता है कि मुझे FooUtil
हर जगह एक उदाहरण देना होगा , क्योंकि परीक्षण।
- मैं
FooUtil
तरीकों को स्थिर नहीं बना सकता , क्योंकि मैं उन्हेंFooUtil
और उसके ग्राहक वर्गों दोनों के परीक्षण के लिए उनका मजाक नहीं उड़ा पाऊंगा । - मैं फिर
FooUtil
से उपभोग की जगह पर एक उदाहरण नहीं बना सकताnew
, क्योंकि मैं इसे परीक्षण के लिए नकली नहीं कर पाऊंगा।
मुझे लगता है कि मेरा सबसे अच्छा शर्त इंजेक्शन का उपयोग करना है (और मैं करता हूं), लेकिन यह परेशानियों के अपने सेट को जोड़ता है। इसके अलावा, कई उपयोग उदाहरणों को पारित करने से विधि पैरामीटर सूचियों का आकार बढ़ जाता है।
क्या इसे बेहतर तरीके से संभालने का कोई तरीका है जो मैं नहीं देख रहा हूं?
अपडेट: चूंकि उपयोगिता कक्षाएं स्टेटलेस हैं, इसलिए मैं शायद परीक्षण के लिए क्लास के अंतर्निहित स्थिर क्षेत्र को अपडेट करने की क्षमता को बनाए रखते हुए एक स्थिर एकल INSTANCE
सदस्य, या एक स्थिर getInstance()
विधि जोड़ सकता हूं । साफ-सुथरा भी नहीं लगता।
FooUtil
तरीकों को डाल दिया जाए FooSomething
, हो सकता है FooSomething
कि वहाँ के गुणों को बदल दिया जाए / बढ़ाया जाए ताकि FooUtil
तरीकों की अब और ज़रूरत न हो। कृपया हमें FooSomething
इस सवाल का एक अच्छा जवाब प्रदान करने में मदद करने के लिए और अधिक ठोस उदाहरण दें।