코드 냄새 26 - 예외 오염

다양한 예외가 있다는 것은 매우 좋은 일입니다. 귀하의 코드는 선언적이고 강력합니다. 아님?

TL;DR; Don't create anemic and empty objects. Even if they are Exceptions.



문제


  • 오버디자인
  • 네임스페이스 오염

  • 솔루션


  • 전역으로 예외를 생성하지 마십시오.
  • 다르게 작동하는 경우에만 예외를 만듭니다.
  • 개체에 대한 모델 예외입니다. 클래스는 게으른 프로그래머에게 편리합니다.

  • 샘플 코드



    잘못된




    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class FileReader {
    
        public static void main(String[] args) {
            FileReader file = null;
    
            try {
                file = new FileReader("source.txt");
                file.read();
            }
            catch(FileNotFoundException e) {
                e.printStackTrace();
            }
            catch(FileLockedException e) {
                e.printStackTrace();
            }
            catch(FilePermissionsException e) {
                e.printStackTrace();
            }
            catch(IOException e) {
                e.printStackTrace();
            }
            finally {
                try {
                    file.close();
                }
                catch(IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    

    오른쪽



    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class FileReader {
    
        public static void main(String[] args) {
            FileReader file = null;
    
            try {
                file = new FileReader("source.txt");
                file.read();
            }
            catch(FileException exception) {
                if (exception.description == (this.expectionMessages().errorDescriptionFileTemporaryLocked() {
                    //sleep and retry    
                    //IF behaviour is the same with all the exceptions just change the text on object creation and raise the icorrect instance
                }            
                this.showErrorToUser(exception.messageToUser();
                 //This example is simplified. Text should be translated
            }                
            finally {
                try {
                    file.close();
                } 
            }
        }
    }
    

    발각



    새 예외는 동작 메서드를 재정의해야 합니다.

    번호 코드, 설명, 재개 가능 등은 작동하지 않습니다.

    태그


  • 남용자
  • 네이밍

  • 결론



    모든 Person 인스턴스에 대해 다른 클래스를 생성하지 않으므로 다른 이름을 반환합니다. 예외를 두고 왜 하시겠습니까?

    특정 예외를 얼마나 자주 포착합니까?.

    나가서 코드를 확인하십시오.

    꼭 클래스여야 하나요?

    당신은 이미 수업에 연결되어 있습니다. 대신 설명에 연결하십시오.

    예외 인스턴스는 .

    처지







    학점



    사진 제공: Nick van den Berg on Unsplash


    You will fall to ruin because you believe that exceptions to the rule make new rules.



    피어스 브라운






    이 기사는 CodeSmell 시리즈의 일부입니다.




    마지막 업데이트: 2021/07/13

    좋은 웹페이지 즐겨찾기