종속 파일 팩스

4471 단어 Refactoring
mixi그룹 Advent Calendar 2016용 문장
하면, 만약, 만약...
  • 모델A에서 벌레온상이 될 수 있는 코드 발견(그런데 지금 제대로 돌아가고 있나요?)
  • 모델A를 사용한 페이지는 20페이지!!!
  • 팩스가 제대로 작동하는지 확인하기도 어려워
  • 이런 일은 자주 발생한다.
    이런 상황에서의 실천을 소개하겠습니다.
    박스
    # ModelA
    sub is_kuso_code {
        my $self = shift;
        my $is_kuso = ...;
        return $is_kuso ? 'y' : 'n'; # bool ぽい値じゃなくて文字列の y/n を返している・・だと!
    }
    
    위와 같은 스팸 코드가 있다고 가정해 보세요.
    그나저나 이 녀석if (is_kuso_code()) ..이면 전부 스팸코드로 판정될 거야
    DB에 enum으로 y/n에 저장된 것을 당기면 보기 드문 일이 발생할 수 있습니다.
    대응
    먼저 각 모듈에 UnitTest를 써야 합니다.만약 그것이 당연한 일이라면, 나는 언제 일을 팩스로 보낼 것인가를 고려할 것이다.
    다 같이 고치면 설치도 검사도 힘들 테니 조금씩 고치세요.
    모두 고쳐!!!한숨을 쉬어도 중도에서 좌절하고, 마지막 결말은 이 빚을 계속 남기는 것이다.
    1. 부채에 대한 의존도를 더 이상 높이지 마라
    기존 행동을 바꾸지 않으면서 새롭게 사용하려면 당연히 좋은 방법을 사용하게 된다.
    여기서 uses_deprecated_kuso_condition_output길어 보이지만 수상한 이 속성을 ON으로 설정하면 y/n이라는 문자열을 돌려주세요.
    (또는 is_kuso_code()is_legacy_kuso_code()로 개명하는 등 다시 제작is_kuso_code()할 수도 있다.
    # ModelA
    
    # モデルのプロパティ
    __PACKAGE__->mk_accessors(qw/
        uses_deprecated_kuso_condition_output
    /);
    
    sub is_kuso_code {
        my $self = shift;
        my $is_kuso = ...;
        if ($self->uses_deprecated_kuso_condition_output) {
            # こっちは新規では使わないでね
            return $is_kuso ? 'y' : 'n';
        } else {
            # perl では true/false は 1/0 とか 1/undef とかだよ
            return $is_kuso ? 1 : 0;
        }
    }
    
    ModelA를 수정했다면, 사용한 부분은 모두uses-입니다.deprecated_kuso_condition_계속해.
    # some page
    
    - my $modelA = ModelA->new();
    + my $modelA = ModelA->new({uses_deprecated_kuso_condition_output => 1});
    
    my $is_kuso = $modelA->is_kuso_code();
    if ($is_kuso == 'y') {
    ...
    
    이렇게 하면 ModelA를 사용하는 페이지 동작이 바뀌지 않고 새로 ModelA를 사용할 때 나쁜 방법을 사용하지 않는다.
    어쨌든 이렇게 하면 상황이 더 이상 나빠지지 않을 것이다.
    (만약 시험을 쓰지 않았다면 정말 영향이 없을까? 이런 것은 자신감을 잃을 수 있기 때문에 시험은 전제가 있다.)
    2. 기존의 구용법을 수정하는 곳
    uses_deprecated_kuso_condition_output 같은 곳에서grep은 이 속성을 사용하는 부분을 천천히 수정하는 데 시간을 쓴다.
    하나하나 하다 보면 동작 확인 범위도 좁아지기 때문에 사고의 팩스를 줄일 수 있다.
    또 세분화를 통해 남은 시간 동안 팩스를 할 수도 있고, 여러 사람이 병행해 빚을 갚을 수도 있다.

    좋은 웹페이지 즐겨찾기