एपीआई डिजाइन और उनके कार्यान्वयन के बीच पृथक्करण अक्सर बड़े सॉफ्टवेयर कार्यान्वयन में अनुशंसा की जाती है। लेकिन कहीं, उन्हें फिर से कनेक्ट करना होगा (यानी, कार्यान्वयन को एपीआई से दोबारा जोड़ा जाना चाहिए)।एपीआई और कार्यान्वयन के बीच अलगाव कुल होना चाहिए?
import java.util.List;
public abstract class Separation {
public static final Separation INSTANCE = new SeparationImpl();
// Defining a special list
public static interface MySpecialList<T> extends List<T> {
void specialAdd(T item);
}
// Creation of a special list
public abstract <T> MySpecialList<T> newSpecialList(Class<T> c);
// Merging of a special list
public abstract <T> MySpecialList<? extends T> specialMerge(
MySpecialList<? super T> a, MySpecialList<? super T> b);
// Implementation of separation
public static class SeparationImpl extends Separation {
@Override
public <T> MySpecialList<T> newSpecialList(Class<T> c) {
return ...;
}
@Override
public <T> MySpecialList<? extends T> specialMerge(
MySpecialList<? super T> a, MySpecialList<? super T> b) {
return ...;
}
}
}
कुछ है कि API कार्यान्वयन कोड का उल्लेख नहीं करना चाहिए का तर्क होगा:
निम्न उदाहरण एक API डिजाइन और उदाहरण वस्तु के माध्यम से इसके कार्यान्वयन की एक मंगलाचरण को दर्शाता है। भले ही हम एपीआई कोड को अलग-अलग फाइलों के माध्यम से कार्यान्वयन से अलग करते हैं, फिर भी अक्सर एपीआई में कार्यान्वयन कोड (कम से कम कक्षा का नाम) आयात करना होता है।
पूरी तरह से योग्य नाम के स्ट्रिंग प्रस्तुति का उपयोग करके ऐसे संदर्भों से बचने के लिए तकनीकें हैं। वर्ग उस स्ट्रिंग के साथ भरा हुआ है और फिर तत्काल। यह कोड को और अधिक जटिल बनाता है।
मेरा प्रश्न: क्या कार्यान्वयन कोड से एपीआई कोड को पूरी तरह से अलग या अलग करने का कोई लाभ है? या क्या यह सिर्फ एक शुद्धवादी प्रयास है जो पूर्ण व्यावहारिक लाभ के साथ पूर्णता तक पहुंचने का प्रयास करता है?
क्या यह ओएसजीआई या सिर्फ अच्छे प्रथाओं के लिए एक पूर्ण आवश्यकता है? – JVerstry
आईपीओजेओ जैसे कुछ ढांचे का उपयोग करने के लिए, लेकिन आपको सभी मामलों में ऐसा करने की ज़रूरत नहीं है (और मैं नहीं) –