좋아, 여기서 불꽃 전쟁을 시작하려하지 않고 정적 언어와 동적 언어 간의 논쟁이 여기 포함하여 여러 번 해쉬되었습니다. 그러나 나는 여기 누군가가 좀 더 밝힐 수 있기를 바랍니다. 길이는 유감 스럽지만 간단한 질문이 아닙니다. 아마도 간단한 대답이 아닙니다.동적 유형 언어로 리팩토링
Ruby, PHP 및 Javascript는 요즘 꽤 인기있는 언어이며, 많은 사람들이이를 방어하고 동적 유형 지정이 개발자를 다시 붙들 지 않는다고 주장합니다. 저는이 언어에 익숙하지 않고 더 큰 프로젝트를 위해이 언어를 사용하기를 원합니다. 그러나 여기에 직장에서 항상오고있는 기본적인 리팩토링 시나리오가 있습니다 (작업 == C#). 그 접근 방법이 궁금합니다. Ruby - 나는 OO 때문에 Ruby를 선택했다.
좋아, Ruby를 사용하고 있으며 Customer 개체를 작성합니다. 그것은 데이터베이스에서로드/저장/삭제하는 방법을 가지고 있습니다. 그것은 좋으며 사람들은 그것을 사용합니다. 나는 다른 것들에 대한 더 많은 메소드를 추가하고 사람들은 그것을 더 많이 사용합니다. 일부 매개 변수를 기반으로 주문 내역을 계산하는 방법을 추가합니다. 지금이 클래스는 시스템 전체에서 사용되고 있습니다. 그런 다음 언젠가 GetOrderHistory 메서드의 매개 변수를 변경하기로 결정했습니다. 그래서 :
- 는 가 내가 생각했던 클라이언트 코드는 새로운 매개 변수를 전달하고 사용하기
- 변경이 수정 새로운 매개 변수를 사용하는 방법의 코드를 다시 작성
- 방법에 새 매개 변수를 추가 방법
하지만 이제 어떻게해야합니까? 나는 수십/수백/whoknows 시스템에서 얼마나 많은 다른 장소를 변경해야합니다. Ruby 나 Javascript와 같은 동적 OO 언어에서는 어떻게해야할까요? 아주 잘 내 머리, 루비를 모르고의 상단 오프
, 나는이 개 바보 답변을 생각할 수 있습니다- 100 %의 코드 커버리지. 나는 전체 응용 프로그램을 테스트하고 그것이 깨질 때마다 그 방법인지 확인하고 고칠 수 있습니다.
- 찾기 및 바꾸기. 그 방법을 찾기 위해 텍스트 검색을 사용합니다. 그러나 동일한 메소드 이름을 가진 다른 객체를 가질 수 있습니다.
이렇게 좋은 대답이 있습니까? IDE가 어려움을 겪을 것 같습니다. 내가
c = Customer.new
과 같은 코드를 가지고 있다면 그것을 알아낼 수있을 것입니다,하지만
c= SomeFunctionThatProbablyReturnsACustomerButMightReturnOtherThings()
을 무엇을한다면 어떤 방법을 사용하면 루비 전문가들은이 경우에 걸릴까요?
리팩토링이 기존 계약을 깨뜨리지 않아야한다고 확신합니다. – CurtainDog
@CurtainDog 라이브러리 내에서 개인 함수의 이름을 바꾸면 어떨까요? – Toskan
또 다른 좋은 예는 루비와 파이썬입니다. 루비 나 파이썬이 새 버전을 발표 할 때 방금 말한 것에 충실 할 수 있다는 점을 상기시켜 주시겠습니까? – Toskan