हां। प्रत्येक परत के लिए अपने स्वयं के स्वतंत्र अपवाद बनाने का एक अच्छा विचार है।
उदाहरण के लिए, यदि आप किसी विशेष डीएओ कार्यान्वयन का उपयोग कर रहे हैं, तो आपको कार्यान्वयन विशिष्ट अपवाद को अपने सामान्य अपवाद में लपेटना चाहिए और इसे सेवा परत पर आगे फेंक देना चाहिए।
हालांकि, आपको अपवाद के अपने पदानुक्रम को बनाने में संवेदनशील होना चाहिए, जैसे कि यह अनुप्रयोग विकास के लिए ओवरहेड नहीं होना चाहिए और साथ ही सेवा परत में आवश्यक जानकारी को बनाए रखने में सक्षम होना चाहिए। ज्यादातर बार, जेनेरिक अपवाद के साथ कस्टम त्रुटि कोड पर्याप्त हैं।
इस तरह कुछ ऐसा कार्यान्वयन विशिष्ट अपवाद अनुकरण करने और सेवा परत पर फेंकने के लिए उपयोग किया जा सकता है।
class AppDAOException extends Exception {
public final static int _FAIL_TO_INSERT = 1;
public final static int _UPDATE_FAILED = 2;
public final static int _SQL_ERROR = 3;
private int errorCode;
public AppDAOException(int errorCode) {
this.errorCode = errorCode;
}
public getErrorCode() {
return errorCode;
}
}
डीएओ कार्यान्वयन से फेंकने:
try {
//code here
} catch (some.impl.SQLSyntaxException e) {
throw new AppDAOException (AppDAOException._SQL_ERROR);
}
चिंता का रिसाव के बारे में: आप अपनी सेवा परत सभी अपवादों के बारे में परेशान करने के लिए नहीं चाहते हो सकता है - जैसे:
} catch(NoRowExistsException e) {
return null;
} finally {
//release resources
}
तो आवेदन की जरूरतों के आधार पर कॉल लेना है।
स्रोत
2012-02-13 06:59:33
क्या आप इसका एक उदाहरण प्रदान कर सकते हैं ... धन्यवाद –
मैंने कुछ समय पहले एक पोस्ट लिखा था। कृपया https://dzone.com/articles/quotdecouplingquot-the-exception-puzzle – Santosh
ठीक है, धन्यवाद, मैं उस के माध्यम से जाऊंगा –