2011-01-26 3 views
0

저는 C#이나 Java가 네임 스페이스 나 패키지를 리팩토링하는 것에 짜증납니다. 여러 클래스에서 많은 독립적 인 프로젝트에서 사용되는 공통 패키지의 클래스를 참조한 경우 해당 패키지를 현재 상위 패키지의 패키지 하위로 이동하기로 결정한 경우 이와 같은 일반 가져 오기를 사용할 수 없기 때문에 모든 클라이언트를 수정해야합니다C# 또는 Java에서 리팩터링하는 가장 쉬운 방법은 무엇입니까?

수입 myPackage에. * 클라이언트에 영향을주지 않고 리팩토링을 허용 할

.

그런 작은 변화에 영향을 줄 수있을 때 어떻게 리팩토링을 할 수 있습니까?

내 통제하에 있지 않은 클라이언트의 코드 인 경우 어떻게됩니까?

+1

ReSharper와 같은 도구를 사용하면 쉽게 할 수 있습니다. –

+0

문제를 이해할 수 있습니다. 특히 API 개발자이고 라이브러리를 사용하는 여러 클라이언트가있는 경우 특히 그렇습니다. 대중이 공개 API를 만드는 동안 사람들은 신중하게주의를 기울입니다. 간단한 질문이 있습니다. 모든 클라이언트 코드를 제어 할 수 있습니까? (제 3 자 고객이있는 경우 운이없는 것입니다.) 이 경우 어댑터 계층을 작성하고 더 이상 사용되지 않는 경고가있는 이전 네임 스페이스에 새 코드를 표시해야합니다. –

+0

물론, 모든 클라이언트 코드를 자신의 제어하에두면 리팩토링이 간단합니다. 모든 프로젝트를 Intellij의 동일한 프로젝트 (모듈)에 추가하고 리팩토링을 수행하기 만하면됩니다. IDEA는 프로젝트간에 공식 연결이 설정되지 않은 경우 (폴더 종속성 또는 참조 된 프로젝트 사용) 폴더 이름을 이해하고 변경합니다. –

답변

3

리팩토링을 지원하는 IDE를 사용하십시오. Eclipse에서 java 파일을 이동하면 모든 참조가 업데이트됩니다. 이름 바꾸기, 패키지 이름 변경 등과 동일합니다. 매우 편리합니다.

+0

내가 통제 할 수없는 클라이언트의 코드라면 어떨까요? – user310291

+0

예. 클라이언트 코드에 대한 액세스 권한이 없으면 변경 내용을 변경하거나 변경 내용을 적용하지 않고 마이그레이션 가이드를 게시하지 않습니다. 아니 쉬운 대답은 여기에. –

1

누군가가 import com.*과 같은 가져 오기를한다고 상상해보십시오. 원하는대로라면 com 패키지에있는 항목을 모두로드합니다. 그러면 많은 수의 클래스가 가져 오기 될 것입니다. 왜 그렇게 느린지, 너무 많은 메모리가 필요한 이유 ......

IDE를 사용하면 대부분의 작업을 처리 할 수 ​​있으며 매우 쉬울 것이지만 여전히 애플리케이션 아키텍처에 필요한 경우 클라이언트에 새로운 실행 파일을 배포해야합니다.

+0

왜 모두로드할까요? 그것은 바로 기술을 사용할 수 있습니다. – user310291

+0

현재 내가 말하는 바가 오해하지 않으면 모든 것을로드하는 것입니다. – fmucar

3

다른 프로젝트 (예 : jar 파일)처럼 컴파일되어 배포 된 패키지에 대해 묻는 것처럼 들립니다. 이것이 가능한 한 올바른 API를 얻는 것이 중요한 이유 중 하나입니다.

How to Design a Good API and Why it Matters

나는 기존 구조를 더 이상 사용하고 새로운 리팩토링 클래스 래퍼 또는 외관으로 각 클래스를 수정할 수 있다고 생각합니다. 이렇게하면 이전 구조를 사용하는 프로젝트 마이그레이션 속도가 느려지면서 새로운 구조를 계속해서 개선 할 수있는 유연성을 얻을 수 있습니다.

+1

나는 완전히 동의한다. –

관련 문제