मैं DRY और KISS सिद्धांतों का एक जुनूनी अनुयायी हूँ लेकिन पिछले सप्ताह मैं एक मामले में जहां दोनों एक दूसरे का खंडन करने लगते थे:चुंबन और सूखी टकराने जब
एक आवेदन मैं कर रहा था के लिए, मैं लागू करने के लिए किया था जो निम्नलिखित करता है समय के लिए एक पाश: ग्रुप ए
- पुनरावृति बी टाइप करें और उन्हें ग्रुप बी की एक सूची में डालने के लिए ग्रुप ए के तत्व को परिवर्तित
यहाँ एक उदाहरण है:
for (A a : listOfA) {
listOfB.add(BFactory.convertFromAToB(a));
}
कोड के भीतर, मैं इस बारे में 4 बार ऐसा करने के लिए, एक प्रकार परिवर्तित (जैसे कि डी, ई आदि) एक और में। मैं उन प्रकारों को बदलने में सक्षम नहीं हूं जिन्हें मैं परिवर्तित करने वाला हूं, क्योंकि वे तृतीय पक्ष प्रकार हैं जिन्हें हमें ऐप में उपयोग करना है।
तो हमने:
convertAndCopy(listOfA, listOfB, new Function<A, B>() {
A apply(B b) {
return CFactory.convertFromBToC(b);
}
});
: private interface Function<S, T> {
T apply(S s);
}
public <S, T> void convertAndCopy(List<S> src, List<T> dst, Function<S, T> f) {
for (S s : src) {
dst.add(f.apply(s));
}
}
एक कॉल इस तरह दिखता है:
for (A a : listOfA) {
listOfB.add(BFactory.convertFromAToB(a));
}
for (C a : listOfC) {
listOfB.add(DFactory.convertFromCToD(c));
}
...
तो, सूखा का उल्लंघन नहीं करने के लिए, मैं एक सामान्य समाधान के साथ आया था
अब, जबकि यह DRY के संदर्भ में बेहतर है, मुझे लगता है कि यह KISS का उल्लंघन करता है, क्योंकि इस समाधान को समझना बहुत मुश्किल है और loops के लिए डुप्लिकेट की तुलना में।
तो, क्या यह DRY बनाम KISS है? इस संदर्भ में किस पक्ष का पक्ष लेना है?
संपादित
बस स्पष्ट होना, वर्ग के बारे में मैं बात कर रहा हूँ एक एडाप्टर है, जो हमारे अपने प्रतिनिधियों कार्यान्वयन के लिए एक विरासत व्यवस्था करने के लिए कहते हैं, रास्ते में हमारे अपने प्रकार में विरासत परिवर्तित है। मेरे पास विरासत प्रकारों को बदलने का कोई साधन नहीं है, न ही मैं अपने प्रकार बदल सकता हूं (जो एक्सएमएल-स्कीमा-जेनरेटेड हैं)।
कीवर्ड: जावा सूखी चुंबन - इसे प्यार करता हूँ! – hawkeye
"शुष्क" का क्या अर्थ है? आह, जवाब यह कहता है, मुझे लगता है कि खुद को दोहराना नहीं है। –
@Angel, sry मैं बाद में संदर्भ जोड़ दूंगा :-)। – helpermethod