Django 프로젝트의 53%에 중복 코드가 있습니다.

Django Doctor는 코드를 감사하고 Django 안티 패턴을 자동으로 수정합니다. 유지 관리를 방해하는 문제에 대해 666개의 Django 프로젝트를 확인했으며 Django 프로젝트의 53%에 중복 설정 및 모델 필드 kwargs가 있음을 발견했습니다.
  • settings.py의 33%에 중복 값이 ​​있음read more
  • 29%는 중복 kwargs가 있는 models.py에 필드가 있음read more

  • 일부 교차로가 있어서 일부 프로젝트는 둘 이상의 진영에 속했습니다.

    "중복"이란 Django가 기본적으로 사용하는 값만 지정하기 때문에 값을 명시적으로 지정할 필요가 없음을 의미합니다. 운전 강사가 "20mph 대신 20mph를 해주세요"라고 말하는 것처럼. 이러한 중복성으로 인해 노이즈에서 신호를 발견하기가 어렵기 때문에 개발자가 중요한 코드에 집중하기가 더 어렵습니다.

    그러나 리던던시 노이즈입니까? 아마도 우리가 확인한 샘플에서 중복이 의도적이지 않은 것처럼 보입니다. 일부는 Zen of Python "명시적인 것이 암시적인 것보다 낫다"로 정당화합니다. 하지만 절반 이상의 프로젝트에서 33% 이상이 이를 수행한 이유는 아닌 것 같습니다. Django 기본값과 모든 기본 필드 kwargs가 하나 또는 둘이 아니라? 또한 Zen of Python은 다음을 제안합니다.
  • 단순한 것이 복잡한 것보다 낫다
  • 아름다운 것이 못생긴 것보다 낫다.
  • 가독성 카운트
  • 희박한 것이 조밀한 것보다 낫습니다
  • .

    따라서 중복 설정이 있는 이유는 종종 다음과 같습니다.
  • 다른 프로젝트에서 설정을 복사하여 붙여넣은 결과; 또는
  • 역사적으로 기본값이 아닌 값은 나중에 업데이트되었으며 Django 기본값을 삭제하고 사용하는 대신 개발자는 단순히 TrueFalse로 변경했습니다.
  • 코드를 검토하는 동안 문제가 네트워크를 통해 미끄러집니다. 대부분의 사람들은 Django의 여러 버전에서 변경되기 때문에 Django 기본 설정 값을 모두 알지 못합니다.

  • 소음을 어떻게 줄일 것인가? 시도하십시오our Django models.py refactor challenge .

    1. 중복 설정



    Django는 default settings과 함께 배송됩니다. django.conf.settings 를 가져오면 모듈을 가져오지 않고 LazySettings 의 인스턴스를 가져옵니다. 이 개체는 실제 설정의 "홀더"를 감싸는 래퍼입니다. Django가 정상적으로 실행되는 동안 소유자는 먼저 기본 설정을 사용한 다음 환경 변수DJANGO_SETTINGS_MODULE로 정의된 파일의 값을 수집합니다.

    따라서 settings.py에서 Django의 기본값을 명시적으로 설정해도 Django가 작동하는 방식은 변경되지 않지만 개발자가 코드를 유지 관리할 때 읽어야 하는 추가 코드 행입니다. 각 추가 라인의 비용은 0이 아닙니다.

    이것의 의미는 Django의 default settings에 이미 정의된 값을 우리의 settings.py에 정의할 때 작업이 idempotent 이라는 것입니다. Django에게는 가치가 없을 수도 있습니다.

    "해킹 스택에서 바늘 찾기"의 좋은 예이기 때문에 사람이 코드를 검토할 때 이러한 것들이 네트워크를 통해 빠져나가기 쉽습니다. 하지만 Django Doctor는 코드 검토 봇이므로 놓칠 수 없습니다.



    2. 중복 필드 kwargs



    Django의 기본 설정과 유사하게 Django의 모델 필드에는 모델 영역이 정의될 때 재정의할 수 있는 default kwargs이 있습니다. 이전 섹션에서 강조한 대부분의 요점은 여기에서 유효하므로 다시 다룰 필요가 없습니다.

    우리가 확인한 프로젝트의 29%는 kwargs를 명시적으로 정의했으며 null=False가 압도적으로 가장 일반적이지만 null is False by default 입니다.

    그래서 대신

    class SomeModel(models.Model):
        some_field = models.CharField(blank=False, null=False)
    


    우리는 일을 단순화하고 다음을 수행할 수 있습니다.

    class SomeModel(models.Model):
        some_field = models.CharField()
    


    모델은 종종 중복 kwargs 없이도 충분히 조밀합니다. 밀도가 낮은 모델은 파일의 가독성을 높이고 개발자의 삶을 조금 더 좋게 만듭니다.

    따라서 Don't Repeat Yourself (DRY) 과 같이 Django를 반복하지 마십시오(DRD)라고 말할 수 있습니다.

    Django를 단순화할 수 있습니까?



    Django 코드베이스의 절반은 단순화할 수 있으며 코드 검토 중에 무언가를 놓치기 쉽습니다. django.doctor에서 확인하거나 review your GitHub PRs에서 확인할 수 있습니다.



    또는 시도해 보십시오Django challenges .

    좋은 웹페이지 즐겨찾기