나는 많은 곳에서 못생긴 try catch 코드를 단순화 할 수있는 방법을 찾고있다. 예를 들어 내가보고 있어요 : 필드가 선택인지 아닌지Java에서 try/catch를 단순화하기위한 접근 방법
이런 종류의 일이 모든 다양한 분야의 여기 저기 반복try {
objectA.setFieldX(objectB.getFieldY());
}
catch(NullPointerException e) {
...stuff
}
catch(OtherException e) {
...stuff
}
, 일부는 기반으로 동작이 약간 다릅니다. 부피가 크며 문서화가 잘되어 있지 않으며 독자가 잘못된 코드를 제외하고는 틀릴 수도 있다는 뚜렷한 인상을 남깁니다.
내 DataTransferObejcts에 get() 또는 set (객체 값)과 같은 일종의 열거 형 FieldID를 사용하는 "일반"get 및 set 메서드가있는 경우 (표준 set (value) 및 get()
setRequiredField(source, <FieldIDAsource>, dest, <FieldIDAdest>);
setOptionalField(source, <FieldIDBsource>, dest, <FieldIDBdest>);
:
setRequiredField(objSource, <FieldIDsource>, objDest, <FieldIDdest) {
object SourceField = objSource.get(<FieldIDsource>);
if (sourceField != null) {
try {
objDest.set(<FieldIDdest>, SourceField);
}
catch (OtherException) {
... stuff (like logging) here
}
}
else {
... stuff (like logging) here
}
}
그런 다음 모든 설정을하는 방법은 같은 코드있을 것입니다 : - 나는 단순히 같은 몇 가지 도우미를 정의 할 수 있습니다 (추한 시도에 싸여 많은 세트와 클래스에/잡는다)
많이 부피가 작고 읽기 쉽고 정확합니다 ....
...하지만 같은 몇 가지 문제가 있습니다 : wazoo의를 캐스팅
1) : 일반적인 방법에서 (데이터 전송 개체에서이) 나는 캐스팅을 많이해야 할 것입니다.
2) 제네릭 메서드를 완전하게/올바르게 만들기 : 열거 형을 사용하여 다소 잠금을 가할 수 있지만 일반적인 메서드에서 실수를하는 걱정이 있습니다 (데이터 전송 개체를 "생성"하고 싶습니다. FreeMarker와 같은 것으로 - 그러나 그들에는 약간의 "도메인 로직"이 있습니다 ...). 사람이 어떻게 실제로
멋지다, 동료는 다른 지루한 세부 사항을 위해 나에게 AspectJ를 언급했다 - 지금 그것을 체크 아웃하는 또 다른 이유. 링크 –
+1 AOP를 주셔서 감사합니다 ... 이것에 대한 이상적인 경우입니다 : D – CoolBeans
귀하의 링크를 읽은 후 이것은 AOP에 대한 좋은 문제처럼 보입니다. 불행히도, 나는 링크 된 문서에있는 것들을 얻었고 다른 것들은 나를 벗어났다. "인형 용 측면 지향 프로그래밍"유형 페이지가 있습니까? –