문제

우리는 모두 들었습니다 조기 최적화, 그러나 조기 리팩토링에 대해 어떻게 생각하십니까? 당신의 의견에 그런 것이 있습니까? 여기 내가받는 것이 있습니다.

우선, Martin Fowler의 주요 작품을 읽습니다 "리팩토링" 프로그래밍과 관련하여 문자 그대로 내 인생을 바 꾸었습니다.

그러나 내가 알아 차린 한 가지는 클래스 나 프레임 워크를 너무 빨리 리팩토링하기 시작하면 때로는 구석 구석 구석에 코딩 된 것을 발견한다는 것입니다. 이제 문제가 실제로 그 자체로 리팩토링되는 것이 아니라 조기/열악한 디자인 결정/가정이 될 것입니다.

이 문제에 대한 당신의 생각, 통찰력 및/또는 의견은 무엇입니까? 이 문제와 관련된 조언이나 일반적인 방지 방지가 있습니까?

편집하다:

귀하의 답변을 읽고이 문제를 더 반영함으로써, 나는이 경우의 내 문제가 실제로 "조기 디자인"의 문제이며 반드시 "조기 리팩토링"의 문제라는 것을 깨달았다 고 생각합니다. 나는 코딩 과정의 초기에 그 방향으로 디자인과 리팩토링을 가정하는 것에 대해 유죄를 선고 받았다. 디자인의 불가지론 수준을 유지하고 깨끗한 코드를 향한 리팩토링에 집중하기 위해 내 입장에 대한 약간의 인내심이 있으면 이러한 디자인 토끼 트레일을 내려 놓지 못하게 될 것입니다.

도움이 되었습니까?

해결책

나는 실제로 반대라고 생각합니다.

일찍 디자인이 리팩토링이 필요할 지 여부에 대해 생각하기 시작하면 더 좋습니다. 끊임없이 리팩터가 있으므로 큰 문제는 아닙니다.

또한 초기에 리팩터를 더 많이 리팩터링할수록 코드를 더 깨끗하게 작성하는 것에 대해 더 잘 얻었습니다. 나는 큰 방법을 적게 만드는 경향이 있으며 문제가 적습니다.

그러나 자신을 모퉁이에 자신을 "리팩토링"한다면, 초기 설계 부족 또는 클래스 사용 범위를위한 계획이 부족할 것으로 기대합니다. 코드 작성을 시작하기 전에 클래스 또는 프레임 워크를 사용하는 방법을 작성해보십시오. 해당 문제를 피하는 데 도움이 될 수 있습니다. 이것은 또한 Driven Design을 테스트하는 데있어 한 가지 이점이 있다고 생각합니다. 이는 객체가 작성되기 전에 객체를 사용하는 것을 강요하는 데 도움이됩니다.

기술적으로 리팩토링은 당신을 코너에 고정 시켜서는 안됩니다. 클래스 사용 방식을 바꾸지 않고 내부를 재 작업하는 것입니다. 리팩토링으로 자신을 가두는 경우 초기 설계에 결함이 있음을 의미합니다.

시간이 지남에 따라이 문제가 점점 좋아질 수 있습니다. 귀하의 클래스 및 프레임 워크 디자인은 아마도 더 유연해질 것입니다.

다른 팁

우리는 모두 조기 최적화에 대해 들어 보았지만 조기 리팩토링에 대해 무엇을합니까? 당신의 의견에 그런 것이 있습니까?

예, 있습니다. 리팩토링은의 방법입니다 기술 부채를 지불합니다 그것은 당신의 개발 과정의 수명에 걸쳐 발생했습니다. 그러나 기술 부채의 단순한 발생이 반드시 나쁜 것은 아닙니다.

그 이유를 확인하려면 IRS에 대한 세금 감소 분석 소프트웨어를 작성하고 있다고 상상해보십시오. 갑자기 마지막 순간에 새로운 규정이 도입되어 여러 원본 가정이 중단됩니다. 잘 설계되었지만 도메인 모델은 최소한 하나 이상의 중요한 장소에서 발 아래에서 근본적으로 바뀌 었습니다. 4 월 14 일이며 프로젝트는 내일 살아 가야합니다. 너 뭐하니?

  • 중간 정도의 기술 부채 비용으로 너트 및 볼트 솔루션을 구현하는 경우 시스템이 더 엄격 해지고 이러한 변화의 다른 라운드를 견딜 수 없게됩니다. 그러나 사이트는 살아 가서 진행할 수 있으며 늦게 배달 할 위험이 없을 것입니다. 필요한 변경을 할 수 있다고 확신합니다.
  • 반면에, 시간을내어 솔루션을 리팩터링하여 이제 더 정교하고 유연한 방식으로 새로운 디자인을 지원할 수 있도록 향후 변화에 적응하는 데 어려움이 없습니다. 그러나 회사의 플래그십 제품이 시계에 비해 실행될 위험이 있습니다. 재 설계가 오늘보다 오래 걸리는지 확실하지 않습니다.

이 경우 첫 번째 옵션은 더 나은 선택입니다. 이전의 기술 부채가 거의 없다고 가정하면, 지금 덩어리를 가져 와서 나중에 지불하는 것이 좋습니다. 물론 이것은 비즈니스 결정이며 디자인 결정이 아닙니다.

너무 일찍 리팩터를 재현 할 수 있다고 생각합니다.

너트와 볼트의 끝에서 설계 코드 자체입니다. 이 디자인의 마지막 단계는 코드에 따라 존재합니다. 때로는 결함이 발생하며 코드가 진화함에 따라 알 수 있습니다. 너무 일찍 리팩토링되면 결함이있는 디자인을 변경하기가 더 어려워집니다.

예를 들어, 잘 형성된 기능과 사용하는 기능 및 사용 기능 등을 삭제하는 것보다 쓰레기 또는 잘못된 방향으로 가고 있다는 것을 알 때 단일 긴 기능을 삭제하는 것이 훨씬 쉽습니다. 당신은 리팩터의 일부였던 다른 것을 깨뜨리지 않습니다.

아마도 더 많은 시간을 디자인해야했을 수도 있지만 민첩한 프로세스의 핵심 요소는 코딩이 설계 프로세스의 일부이며 대부분의 경우 합리적인 노력을 설계에 적용한 것입니다. 그것으로.

편집하다 의견에 대한 응답으로 :-

코드를 작성할 때까지 디자인이 완료되지 않았습니다. 우리는 해결할 수 없습니다 모두 사전 코딩 디자인의 문제, Agile의 배후의 요점은 그 코딩입니다. ~이다 문제 해결. 비 코드 디자인이 코딩하기 전에 모든 문제를 최전 한 경우 답장 요소, 우리는 단순히 디자인을 한 단계로 잘 알려진 코드로 변환합니다.

1980 년대 후반과 1990 년대 초반 구조화 된 디자인 방법을 기억하는 사람은 누구나 코드 라인을 작성하기 전에 영리한 다이어그램으로 모든 문제를 해결 한 방법을 기억하십니까?

조기 리팩토링은 단위 테스트없이 리팩토링됩니다. 당신은 그 시점에서 단순히 리팩토링을 준비하지 않습니다. 먼저 단위 테스트를받은 다음 리팩토링에 대해 생각하기 시작하십시오. 그렇지 않으면 당신은 도움보다 프로젝트를 더 많이 다치게 할 것입니다.

나는 "1.0"프로젝트가 이런 종류의 프로젝트에 취약하다고 생각합니다 ... "반복 디자인"이라고 부릅니다. 객체를 설계하기 전에 명확한 사양이 없다면, 많은 디자인과 문제에 대한 접근 방식을 생각할 것입니다.

따라서이 특정 문제를 극복하는 것은 코드 작성을 시작하기 전에 사물을 명확하게 설계하는 것입니다.

상황에 따라 이러한 유형의 문제에 대한 유망한 솔루션이 있습니다.

문제가 특정 방식으로 최적화 될 수 있고 방법이나 무언가를 추출하고 그 결정으로 인해 다른 모든 것을 복잡한 방식으로 코딩해야한다는 것을 깨달았다면 문제는 아마도 당신이하지 않았을 것입니다. 디자인 과정에서 충분히 생각하십시오. 잘 쓰여지고 계획된 사양이 있었다면,이 문제에 대해 미리 알고 있었을 것입니다 (사양을 읽지 않는 한 또 다른 문제입니다 :)).

상황에 따라 빠른 프로토 타이핑은이 문제를 해결할 수 있습니다. 실제 작업을 시작할 때 이러한 구현 세부 사항에 대한 더 나은 아이디어를 얻을 수 있기 때문입니다.

나는 끊임없는 리팩토링에 대한 강한 신자입니다. 리팩토링을 시작하기 위해 특정 시간까지 기다릴 이유가 없습니다.

더 잘해야 할 일을 볼 때마다 리팩터.

내 마음에 이것을 유지하십시오. 나는 너무 많이 리팩터링하는 개발자 (순수한 천재)를 알고 있습니다 (그는 항상 더 똑똑하여 항상 더 나은 방법을 찾을 수 있음) 그는 결코 프로젝트를 끝내지 않습니다.

조기 최적화가 나쁜 이유는 최적화가 일반적으로 디자인이 악화되기 때문입니다. 리팩토링과 달리, 더 나은 디자인으로 이어지고 사려 깊고 올바른 경우. 리팩토링의 유용성을 분석하는 데 유용한 것을 배운 것은 먼저 UML 다이어그램을보고 변경 사항을 시각화 한 다음 먼저 클래스를위한 코드 DOC (예 : Javadoc)를 작성하고 실제 코드보다 스터브를 추가하는 것이 었습니다. 물론 경험은 의심스러운 경우 좋아하는 건축가에게 물어 보는 데 많은 도움이됩니다.)

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