আমাদের জাভা কোডবেসে আমি নিম্নলিখিত প্যাটার্নটি দেখছি:
/**
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
পদ্ধতিগুলি beোকানো উচিত FooSomething
, সম্ভবত এর বৈশিষ্ট্যগুলি FooSomething
পরিবর্তন / প্রসারিত করা উচিত যাতে FooUtil
পদ্ধতিগুলির আর প্রয়োজন হয় না। FooSomething
এই প্রশ্নগুলির একটি ভাল উত্তর প্রদান করতে আমাদের কী কী সহায়তা করতে হবে তার আরও দৃ concrete় উদাহরণ দিন ।