문제

분명히 여러분 중 일부는 이것을 다루었습니다. 프로그래머가 OO에 의해 약간 가져 와서 성능과 데이터베이스를 잊어 버릴 때 발생하는 경향이 있습니다.

예를 들어, 이메일 테이블이 있고이 프로그램에서 보내야한다고 가정 해 봅시다. 스타트 업에서는 다음과 같이 전송 해야하는 모든 것을 찾습니다.

Emails = find_every_damn_email_in_the_database();
FOR Email in Emails
  IF !Email.IsSent() THEN Email.Send()

이것은 자신의 관점에서 볼 수 없지만 때로는 피할 수 없으므로 다음과 같습니다.

Emails = find_unsent_emails();
FOR Email in Emails
  Email.Send()

이것의 이름이 있습니까?

도움이 되었습니까?

해결책

나는 그것에 가서 "게으른 필터 (anti) 패턴"이라는 이름을 동조 할 것입니다.

다른 팁

나는 그것을 한 번 보았다. 그 프로그래머는 너무 오래 걸리지 않았습니다.

우리는 그것을 불렀다 "소방 방법".

나에게 그것은 Joel Spolsky 's입니다 누출 추상화.

그것은 정확히 반포 반대가 아니지만,이 코드를 쓴 사람은 활성 레코드 패턴 추상화가 어디에 누출되는지 실제로 이해하지 못했습니다.

나는 그것을 "샷건 접근"이라고 부릅니다.

그룹에 필터를 적용하기위한 복잡하고 비싼 절차 (예 : 플래그 이상)가있을 수 있기 때문에 이것이 반드시 데이터베이스 관련이라는 것을 확신하지 못합니다.

첫 번째 디자인이 단순히 좋지 않기 때문에 이름이 있다고 생각하지 않으며, 하나의 책임 전용 원리를 위반합니다. 필터링 된 필터링을 검색, 필터링 및 인쇄하면 여러 작업을 수행하므로 "검색 된 필터링"및 인쇄로 리팩터링해야합니다.

여기서 간단한 리팩토링과 다른 유일한 것은 성능에 영향을 미치는 방식으로 내부 루프가 설계 될 수있는 것과 같은 방식으로 성능에도 영향을 미친다는 것입니다.

다음과 같은 반포에서 파생 된 것으로 보입니다.

원래 개발자는 find_unsent_emails () 구현을 작성할 수 없으므로 난쟁이 기능을 재사용했을 것입니다. 그런 다음 개발 및 테스트 후 왜 변경합니까?

이는 종종 기존 쿼리를 사용하는 것이 훨씬 쉬워서 새 SQL 쿼리가 추가되는 것보다 코드를 필터링하기 때문입니다. 어쩌면 DBA가 모든 쿼리를 제어하고 새 쿼리 승인을받는 데 며칠이 걸리거나 사용중인 ORM 도구가 자신의 사용자 정의 쿼리를 정의하기가 매우 어렵 기 때문일 수 있습니다.

내가 이름을 지었다면 나는 그것을 "쉬운 길"(안티) 패턴이라고 부를 것입니다. 그것이 반포인지 여부는 실제로 개별 상황에 달려 있습니다. 항상 상당히 적은 수의 항목이라면 검색 해야하는 경우 코드에서 필터링을하는 것은 큰 문제가 아닙니다. 그러나 항목 수가 많고 지속적으로 성장할 가능성이있는 경우 서버에서 필터링을 수행해야합니다.

다른 곳에서 비슷한 문제를 보았습니다. 여기서 간단한 일이해야 할 일이 대신, "메모리 클러스터"를 기반으로 "수집 클러스터"를 기반으로 한 "목록 클러스터"를 기반으로 한 "트랜잭션 클러스터"가있었습니다. 말할 것도없이, 가장 단순한 것은 큰 큰 괴물 거래로 바뀌 었습니다.

나는 그것을 불렀다 급격한 일반성.

스투 피드 아마추어.

진지하게, 나는 컴퓨터 과학 학위를 가진 사람들과 전혀 전문적인 경험이없는 사람들에게서 이것을 보았습니다. 듀크에서 가르 칠 때 고문과 저는 사람들이 이런 종류의 오류를 정확히 보게하는 "대규모 프로그래밍"수업을 진행했습니다.

첫 번째 성능은 실제로 유형에 따라 괜찮을 수 있습니다. Emails. 반복자라면 (생각하십시오 std::vector::begin() 안에 C++) 그런 다음 일부 컨테이너에 미지 이메일을 모두 저장하는 것보다 괜찮습니다.

이 안티 패턴에는 몇 가지 가능한 이름이 있습니다.

  • "알지 마라"antipattern
  • "Fascist-DBA"antipattern
  • "뭐야 '-평생?" 반포 란

좋은 예가 있습니다 매일 WTF.

1800 년대의 "게으른 필터 (anti) 패턴", "기능 장애 프로그래밍"(즉 기능 프로그래밍의 반대)는 어떻습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top