프로젝트를 개발할 때 종종 재 설계한다는 것은 나쁜 신호입니까?


39

처음 프로그래밍을 시작했을 때 언젠가는 모든 클래스의 UML 다이어그램을 앉아서 스케치하여 프로젝트를 시작할 시점에 도달했다고 가정했습니다. 나는 지금 몇 년 동안 프로그래밍을 해왔지만 그렇게되지는 않았다. 프로젝트를 진행할 때 종종

  • "이봐, 나는 _ _ 할 클래스가 필요합니다 . 전에는 생각하지 못했습니다."
  • "잠깐,이 함수는 실제로이 클래스 대신 해당 클래스에 있어야합니다.이 함수로 넘어가겠습니다."
  • "이것은 실제로 하나가 아닌 두 개의 클래스 여야합니다. 분할하겠습니다."
  • "이 세 가지 독립형 클래스를 모두 하나의 추상 클래스에서 상속해야합니다."
  • 기타 등등.

내가 따라갈 때 종종 이렇게 재 설계한다는 것은 나쁜 징조입니까? 이것은 내가 가난한 프로그래머이거나 이것이 정상이라는 것을 의미합니까?

답변:


41

이것은 개발의 정상적인 부분입니다. Continuous Design 의 두 가지 핵심 원칙 은 다음과 같습니다.

  1. 당신은 전능하지 않습니다, 당신은 시작하기 전에 처음부터 끝까지 전체 시스템을 알 수 없습니다.
  2. 디자인은 정적이 아닙니다. 이것은 프로젝트가 오랫동안 사용되어 왔을 때 더 널리 퍼져 있으며 현재 해결중인 문제가 처음 작성되었을 때 해결했던 문제가 아닙니다.

이 문제에 대한 개인적 견해로는 매크로 디자인에 대해 잘 알고 있어야 하지만 마이크로 디자인이 발전 할 수 있다는 것입니다. 그것을 표현하는 또 다른 방법은 높은 수준의 디자인 (UML / 모델링 도구를 사용하는 한)이 프로젝트 수명 동안 거의 정적으로 유지 될 것입니다. 어떤 메소드를 수행하는지에 대한 자세한 디자인과 클래스 계층 구조는 자유롭게 변경 가능해야합니다.

해결하려는 문제에 대해 많이 알지 못하면 초기 단계를 훨씬 더 잘못하게됩니다. 그러나 오랫동안 작업 한 후에는 전반적인 디자인이 정착되기 시작하고 말한 리팩토링이 코드를 깔끔하게 유지하는 데 필요한 전부입니다.


3
+1, 이것이 사람들이 객체를 데이터베이스에 직렬화하는 것에 대해 항상 울부 짖는 이유입니다. 내일 수업이 여러 부분으로 폭발했다면 오래된 코드를 유지하지 않고 어떻게 직렬화를 해제합니까? 핵심 클래스가 자유롭게 진화 할 수있는 Protobuf 대안 (저장소 / 메시지 교환 전용 클래스)을 선호하며 직렬화 / 직렬화 해제 계층을 조정하면됩니다.
Matthieu M.

@Matthieu-데이터베이스 마이그레이션을 작성합니다. 작성하고 테스트하는 데 거의 1 시간 이상이 걸립니다. Ruby on Rails에는 데이터베이스 마이그레이션을위한 매우 훌륭한 기능이 있습니다.
케빈 클라인

1
@ kevin : 우리는 같은 데이터베이스를 가지고 있지 않습니다. 내에는 수억 줄이 포함되어 있습니다. 마이그레이션은 옵션 이 아닙니다 .
Matthieu M.

+1-실수를 저지르기에는 너무 자랑스럽고 완고한 것은 좋은 일이 아닙니다. 어떤 사람들은 실수를 주별의 표시로 인정하지만 대부분은 당신을 존중할 것입니다. 심각한 실수에 대처하기위한 전략이 실수라는 것을 부인하는 것이라면 두 번째 실수는 치명적일 가능성이 높습니다.
Steve314

12

당신이하고있는 것을 일반적으로 "리팩토링"이라고합니다. 당신이 그 일을 중단하면 당신은 곤경에 처해 있습니다.

사실 대부분의 코드는 복잡하고 인간, 심지어 똑똑한 사람도 한 번에 알아낼 수 없습니다.



5

이러한 재 설계가 항상 대대적 인 개편이거나 처음부터 다시 작성하지 않는 한 완벽하게 좋습니다. 걱정마 프로젝트를 시작할 때 UML 다이어그램으로 시작하는 것이 좋지만, 작업 할 때 상황이 변한다는 것을 거의 항상 발견 할 것이므로 돌로 조각하지 마십시오. 당신은 당신이 초기 설계시에, 비즈니스 요구 사항의 변화가 때로는 초기 설계시 미지수가 아니지만 있다고 방식으로 일부 기능을 imrove 할 수 있습니다, 당신은 시작 부분에서 몰랐 새로운 기술을 배울 수 있습니다 나중에 설명하는 등

무엇 입니다 중요한 것은 그들이 디자인의 의미있는 변화, (자신을 포함) 다른 미래의 개발자를 반영하도록 매우 혼란을 끝낼 수 있었다 그 초기 UML 문서를 이동하고 업데이트하는 것입니다. 이것은 어려울 수 있으며 종종 좋은 훈련과 시간이 필요합니다.

디자인으로 시작하여 구현할 때까지 100 % 준수하는 것은 매우 드 rare니다. 나는 개인적 으로 아주 작고 사소한 프로그램을 제외하고는 이런 일이 발생하는 것을 본 적이 없습니다 .


6
1 단계 : UML 다이어그램 작성 2 단계 : 코드 작성 3 단계 : UML 다이어그램을 아무도 보지 못하게하고 코드가 실제로 어떻게 작동하는지 혼동하지 않도록하십시오.
kubi

4

당신이하고있는 일은 완벽하게 정상입니다 (매번 처음부터 완전히 다시 시작하지 않는다면). 나는 20 년 이상이 일을 해왔으며 여전히 반복적 인 과정입니다.

모든 것을 미리 설계하고 고수 할 수있는 유일한 시간은 지난번에 해결했던 것과 똑같은 문제를 해결하는 경우에만 개선의 여지를 찾을 수 있습니다.


2

나는 결코 숙련 된 개발자는 아니지만 이것도한다. 지난 몇 년 동안 필요한 아키텍처를 정신적으로 구축 할 수있는 능력이 크게 향상되었습니다. 그러나 소프트웨어를 작성할 때 계획이 아무리 많더라도 항상 약간의 재 설계가 필요한 장소가 있습니다. 내가 몰랐던 지점은 코드가 실제로 작성 될 때까지 반복됩니다.

이 게시물의 요점은 내가 당신의 목록에있는 모든 일을하고 있다는 것입니다. 그 일이 끊임없이 일어나고 생산성에 실제로 부정적인 영향을 미치지 않는 한 그러한 일이 반드시 나쁘다고 생각하지 않습니다.


0

이를 반복 프로세스라고하며 모든 최신 소프트웨어 개발 기술의 기본 개념입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.