«refactoring» 태그된 질문

리팩토링은 기존 코드를 재구성하여 외부 동작을 변경하지 않고 내부 구조를 변경하는 훈련 된 기술입니다.

5
새로운 기능에 중점을 둔 프로젝트에서 깨지지 않은 기존 코드를 리팩터링해야합니까?
응용 프로그램에 새로운 기능을 추가하려는 소규모 프로젝트를 감안할 때 도입 된 변경 사항은 특정 영역의 코드 업데이트와 관련된 일부 기존 코드에 영향을줍니다. 구현하는 동안 업데이트 된이 코드 중 일부를 리팩토링 후보로 찾았습니다. 영향을받는 구성 요소에 대한 회귀 테스트가 필요한 리팩토링에 적합한 시간입니까 (따라서 원래 프로젝트의 일부가 아닌 범위를 도입 할 …

3
Java에서 사용 중단시기 및 삭제시기
리팩토링 노력 또는 지속적인 개발의 일환으로 특정 방법이나 전체 클래스가 어떤 의미에서 더 이상 사용되지 않을 수 있습니다. Java는 @Deprecated주석을 지원하여 문제의 기능을 처리하는 더 좋은 방법이 있음을 나타냅니다. API의 일부를 제거하는 효과를 알 수없는 공용 API에서 특히 유용하다고 생각합니다. 비공개 API 및 개정 제어 시스템을 사용하는 프로젝트 (따라서 어떤 …

2
반복적 인 코드를 구성하는 방법?
우리 팀은 많은 일회용 웹 양식을 만듭니다. 이러한 양식의 대부분은 전자 메일을 보내고 일부는 간단한 데이터베이스 쓰기 작업을 수행합니다. 현재 각 양식은 Visual Studio Team Foundation Server의 자체 솔루션으로 존재합니다. 그것은 우리가 100 가지에 가까운 양식 프로젝트에 가까워서 일관성을 유지하기 어렵다는 것을 의미합니다. 각 양식은 필드가 다르다는 점에서 독특하지만 모든 …

4
오래된 프로젝트를 정리하는 좋은 방법은 무엇입니까?
약 2 년 전에 작성한 일부 소프트웨어가 있으며 추가 된 기능이 필요합니다. 나는 그것이 끔찍한 혼란에 빠졌다는 것을 깨달았고 나는 모든 것을 움직이고 정리하는 등의 충동을 가지고있다. 나는 Joel on Software 기사를 다시 시작하지 않는 것에 대해 읽었 으므로 가장 좋은 방법은 무엇입니까?

6
SRP를 구현하는 실용적인 방법은 무엇입니까?
클래스가 단일 책임 원칙을 위반하는지 확인하기 위해 사람들이 실제로 사용하는 기술은 무엇입니까? 나는 수업이 바뀌어야 할 이유가 하나 밖에 없다는 것을 알고 있지만, 그 문장에는 실제로 그것을 구현할 실질적인 방법이 부족하다. 내가 찾은 유일한 방법은 ".........해야합니다 ......... 자체" 문장을 사용하는 것입니다. 여기서 첫 번째 공백은 클래스 이름이고 나중에 공백은 메서드 …

5
기존 웹 애플리케이션 리팩토링에 접근하는 방법은 무엇입니까?
나는 최근에 많이 읽고 생각하고 있으며 웹 개발 전략을 다시 생각해야한다는 결론에 도달했습니다. 나는 많은 즉각적인 프로그래밍을하고 있으며 2 년 동안 PHP 웹 응용 프로그램에서 일해 왔으며 작은 도구로 시작한 것이 큰 프로젝트가되었습니다. 그러나 톤이 기존의 나와 내 이전의 코드, 시간에 메이크업 감각이있을 수 있습니다 코드의 니펫을, 그러나 지금 나는 …

4
적절한 방법으로 조건부를 다형성으로 대체 하시겠습니까?
프로토콜 (Swift 프로그래밍 언어 측면에서 두 가지 클래스 Dog와 Java / C #의 인터페이스)을 Cat준수하는 클래스 를 모두 고려하십시오 Animal. 우리는 개와 고양이의 혼합 목록을 보여주는 화면이 있습니다. 거기 Interactor클래스는 뒤에서 그 핸들 로직은. 이제 고양이를 삭제하려고 할 때 사용자에게 확인 알림을 표시하려고합니다. 그러나 경고없이 개를 즉시 삭제해야합니다. 조건부가있는 방법은 …

4
어디에서나 데이터 검사를 도입 할 수있는 좋은 코드 스타일?
나는 크기가 충분히 커서 프로젝트를 더 이상 머리 속에 담을 수 없습니다. 나는 많은 클래스와 함수를 다루고 있으며 데이터를 전달하고 있습니다. 시간이 지남에 따라 오류가 계속 발생한다는 것을 알았습니다. 데이터를 다른 함수에 전달할 때 데이터의 정확한 형식을 잊어 버렸습니다. 예를 들어 하나의 함수는 문자열 배열, 다른 함수는 나중에 작성하여 사전 …

6
똑같이 차선책으로 디자인을 반복적으로 피하는 방법은 무엇입니까?
그래서 아마도 많은 사람들처럼, 나는 종종 문제를 직감적으로 맞추고 원하는 이점을 갖는 디자인 패턴 / 접근법이있는 디자인 문제로 두통을 겪고 있습니다. 종종 어떤 종류의 작업없이 패턴 / 접근을 구현하기 어렵게 만드는 몇 가지주의 사항이있어 패턴 / 접근의 이점을 무효화합니다. 거의 모든 패턴 / 접근 방식을 반복하는 것은 매우 쉬운 일이 …

5
유사한 기능에 다른 패턴 사용
저는 다른 소프트웨어 프로젝트와 마찬가지로 향후 다른 사람이 사용할 수있는 프로젝트의 유일한 개발자입니다. 기능 A를 구현하기 위해 패턴 X를 사용했다고 가정 해 봅시다. 기능을 개발하고 마무리 한 후에 방금 배운 패턴 Y를 사용하여 동일한 기능을 구현할 수 있다는 것을 알게되었습니다. 그러나 기능 A는 훌륭하게 작동하며 X에서 Y로 리팩토링하는 데 시간이 …

4
클래스의 복잡성 감소
몇 가지 답변 을보고 Google에서 검색했지만 유용한 정보를 찾을 수 없었습니다 (예 : 불편한 부작용이 없음). 내 문제는 요약하자면, 나는 객체가 있고 그것에 대해 긴 일련의 작업 을 수행해야한다는 것입니다. 차를 만드는 것과 같은 일종의 조립 라인이라고 생각합니다. 이러한 객체는 Method Objects 라고 합니다 . 따라서이 예제에서는 어느 시점에서 installWithSeat, …

3
DRY 또는 Command-Query-Separation을 타협해야합니까?
최근에는 명령 및 쿼리 방법 인 방법을 리팩토링했습니다. 하나의 명령 방법과 하나의 쿼리 방법으로 분리 한 후 코드에서 명령을 호출 한 다음 쿼리에서 값을 얻는 여러 위치가 있음을 알았습니다. 이것은 DRY 원칙을 위반하는 것처럼 보입니다. 그러나 해당 공통 코드를 메소드로 랩핑하는 경우 해당 메소드는 명령과 쿼리입니다. 이것이 허용됩니까?

3
큰 방법을 리팩터링 할 때 어떤 것도 깨지 않도록 어떻게 도움이됩니까?
현재 단위 테스트가없는 대형 코드베이스의 일부를 리팩토링하고 있습니다. 코드를 리팩토링하려고 시도했습니다. 즉, 코드가 수행하는 작업과 변경 사항으로 인해 변경되지 않는 것을 추측하려고 시도했지만 성공하지 못했습니다. 코드베이스 주변의 모든 기능을 임의로 중단합니다. 리팩토링에는 레거시 C # 코드를보다 기능적인 스타일로 이동 (레거시 코드는 LINQ를 포함한 .NET Framework 3 이상의 기능을 사용하지 않음), …

7
임시 변수 대 라인 길이 요구 사항
Martin Fowler 's Refactoring을 읽고 있습니다. 일반적으로 우수하지만 Fowler의 권장 사항 중 하나가 약간의 문제를 일으키는 것으로 보입니다. Fowler는 임시 변수를 쿼리 대신 다음과 같이 바꾸는 것이 좋습니다. double getPrice() { final int basePrice = _quantity * _itemPrice; final double discountFactor; if (basePrice > 1000) discountFactor = 0.95; else discountFactor …

5
전략 패턴으로 리팩토링 된 함수를 단위 테스트하는 방법은 무엇입니까?
코드에 다음과 같은 함수가있는 경우 : class Employee{ public string calculateTax(string name, int salary) { switch (name) { case "Chris": doSomething($salary); case "David": doSomethingDifferent($salary); case "Scott": doOtherThing($salary); } } 일반적으로 팩토리 클래스와 전략 패턴을 사용하여 Ploymorphism을 사용하도록 이것을 리팩터링합니다. public string calculateTax(string name) { InameHandler nameHandler = NameHandlerFactory::getHandler(name); nameHandler->calculateTax($salary); } …

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