আমি একটি তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করি। তারা আমাকে একটি পোজো পাস করেছে যা আমাদের উদ্দেশ্য এবং উদ্দেশ্যগুলির জন্য সম্ভবত এইভাবে প্রয়োগ করা হয়েছে:
public class OurData {
private String foo;
private String bar;
private String baz;
private String quux;
// A lot more than this
// IMPORTANT: NOTE THAT THIS IS A PACKAGE PRIVATE CONSTRUCTOR
OurData(/* I don't know what they do */) {
// some stuff
}
public String getFoo() {
return foo;
}
// etc.
}
তাদের এপিআই encapsulate এবং ইউনিট পরীক্ষার সুবিধার্থে সীমাবদ্ধ নয় সহ অনেকগুলি কারণে, আমি তাদের ডেটা মোড়াতে চাই। তবে আমি চাই না যে আমার মূল ক্লাসগুলি তাদের ডেটার উপর নির্ভরশীল হোক (আবার পরীক্ষার কারণে)! এখনই আমার কাছে এরকম কিছু রয়েছে:
public class DataTypeOne implements DataInterface {
private String foo;
private int bar;
private double baz;
public DataTypeOne(String foo, int bar, double baz) {
this.foo = foo;
this.bar = bar;
this.baz = baz;
}
}
public class DataTypeTwo implements DataInterface {
private String foo;
private int bar;
private double baz;
public DataTypeOne(String foo, int bar, double baz, String quux) {
this.foo = foo;
this.bar = bar;
this.baz = baz;
this.quux = quux;
}
}
এবং তারপরে এটি:
public class ThirdPartyAdapter {
public static makeMyData(OurData data) {
if(data.getQuux() == null) {
return new DataTypeOne(
data.getFoo(),
Integer.parseInt(data.getBar()),
Double.parseDouble(data.getBaz()),
);
} else {
return new DataTypeTwo(
data.getFoo(),
Integer.parseInt(data.getBar()),
Double.parseDouble(data.getBaz()),
data.getQuux();
);
}
}
এই অ্যাডাপ্টার ক্লাসটি অন্য কয়েকটি শ্রেণীর সাথে মিলিত হয়েছে যা তৃতীয় পক্ষের API সম্পর্কে জেনে রাখা উচিত, এটি আমার সিস্টেমের বাকী অংশে এটি সর্বদা বিস্তৃত করে দেওয়া। তবে ... এই সমাধানটি গ্রস! ক্লিন কোডে, পৃষ্ঠা 40:
তিনটিরও বেশি আর্গুমেন্টের (পলিয়েডিক) খুব বিশেষ ন্যায্যতা প্রয়োজন - এবং তারপরে যাইহোক এটি ব্যবহার করা উচিত নয়।
আমি যে বিষয়গুলি বিবেচনা করেছি:
- স্থির সহায়ক পদ্ধতির চেয়ে ফ্যাক্টরি অবজেক্ট তৈরি করা
- বাজিলিয়ান আর্গুমেন্ট থাকার সমস্যাটি সমাধান করে না
- নির্ভরশীল কনস্ট্রাক্টর রয়েছে এমন ডেটা টাইপঅন এবং ডেটা টাইপটো দুটির একটি সাবক্লাস তৈরি করা হচ্ছে
- এখনও একটি পলিয়েডিক সুরক্ষিত কনস্ট্রাক্টর রয়েছে
- একই ইন্টারফেসের সাথে সামঞ্জস্যপূর্ণ সম্পূর্ণ পৃথক বাস্তবায়ন তৈরি করুন
- একসাথে উপরের ধারণাগুলির একাধিক
এই পরিস্থিতি কীভাবে পরিচালনা করা উচিত?
নোট করুন এটি একটি দুর্নীতিবিরোধী স্তর পরিস্থিতি নয়। তাদের এপিআই-তে কোনও সমস্যা নেই। সমস্যাগুলি হ'ল:
- আমি আমার ডেটা স্ট্রাকচারগুলি চাই না
import com.third.party.library.SomeDataStructure;
- আমি আমার পরীক্ষার ক্ষেত্রে তাদের ডেটা স্ট্রাকচার তৈরি করতে পারি না
- আমার বর্তমান সমাধানটির ফলাফল খুব উচ্চতর আর্গুমেন্টের গণনায়। আমি তাদের ডেটা স্ট্রাকচারে পাস না করেই যুক্তি গণনা কম রাখতে চাই।
- যে প্রশ্ন হল " কি একটি দুর্নীতি দমন স্তর?"। আমার প্রশ্ন " এই পরিস্থিতিটি সমাধান করতে আমি কীভাবে কোনও প্যাটার্ন, কোনও প্যাটার্ন ব্যবহার করতে পারি?"
আমি কোডের জন্য জিজ্ঞাসা করছি না, হয় (অন্যথায় এই প্রশ্নটি এসও তে হবে), আমাকে কার্যকরভাবে কোড লিখতে সক্ষম করার জন্য যথেষ্ট উত্তর চেয়েছিলেন (যা এই প্রশ্নটি সরবরাহ করে না)।
The ideal number of arguments for a function is zero (niladic). Next comes one (monadic), followed closely by two (dyadic). Three arguments (triadic) should be avoided where possible. More than three (polyadic) requires very special justification — and then shouldn’t be used anyway.