코드 재사용 철학을 다루는 방법?


10

새 프로젝트를 시작할 때 코드 재사용에 대해 끊임없이 생각하고 있습니다.

코드를 어느 정도 재사용 할 수 있어야합니까?
애플리케이션 범위로 제한해야합니까, 아니면 프로젝트 외부에서 재사용 할 수 있도록해야합니까?

때로는 코드 재사용 성이 단순한 디자인에 방해가 될 수 있습니다. 코드 재사용에 대한 자신의 이해와 접근 방식을 공유하십시오.


답변:


21

코드는 재사용하기 전에 작동해야합니다. 따라서 코드 재사용을 고려하기 전에 디자인 및 (기본) 기능이 수행되어야 함을 의미합니다.

재사용을 생각하고 이미 작성한 구성 요소를 재사용하는 것이 좋습니다. 그러나 때로는 코드를 작성하고 작동시키는 것이 더 빠르지는 않지만 빠를 수도 있습니다. 원래 문제를 해결 한 후 코드를 리팩토링하여 재사용 성을 높일 수 있습니다.


2
첫 번째 문장에서 "was"는 오타 "has"입니까?

@delnan- "뭐"였어? :-) 그것을 잡아 주셔서 감사합니다.

9

KISS와 YAGNI를 기억하십시오 :

디자인 문서가 준비re-usability better to be considered 되면 코드를 작성 하십시오 . 이를 통해 잠재적으로 복제 될 코드의 섹션 / 부분을 볼 수 있습니다.

따라서 명확한 디자인이 없으면 작업에 KISS 및 YAGNI 방식 을 적용 하십시오!


1

이것은 내 경험에 의한 것이지만 여전히 적용 할 수 있다고 생각하고 GlenH7이 언급 한 내용을 따릅니다 .

다양한 프로젝트를 수행하는 3 개 회사 사이에서 일합니다. 이 회사는 몇 가지 표준 관행과 작업 방법론을 사용 하여 서로의 자매 이지만 많은 방법으로도 독특합니다. 그 말로, 나는 일반적으로 각 프로젝트를 새로 시작하고 그냥 끝내거나 진행 상황을 보여주기를 원합니다. 그런 다음 이전 프로젝트를 위해 작성한 코드 또는 기능을 기억하는 시나리오에 빠지면 두 가지 중 하나를 수행합니다 (시간에 따라 다름).

  1. 가장 빠른 방법
    다른 프로젝트 (많은 시간이 없음)의 이전 코드를 현재 프로젝트에 복사합니다.
  2. 두 번째로 빠른 방법
    앞의 코드를 복사하여 공용 라이브러리에 넣은 다음 현재 프로젝트에 해당 라이브러리를 포함시켜보다 쉽게 ​​진행할 수 있습니다.

    2b. 다른 (원본) 프로젝트를 변경하면 새 라이브러리를 사용하도록 리팩터링합니다 (그러나 일반적으로 해당 프로젝트를 다시 터치하지 않는 한 변경하지 않음).

그냥 경고하고, 공용 라이브러리에서 지옥을 테스트하십시오. 공통 라이브러리는 종속성 작성을 의미합니다. 종속성은 실패 지점을 만듭니다. 현재 구현에 약간 조정 된 것이 필요할 수 있지만 해당 라이브러리를 사용하여 다른 것이 어떻게 변경되는지는 모릅니다.


네 개 또는 다섯 개가 동일한 단일 구현을 사용하는 이유는 무엇입니까? "가장 빠른"방법은 아주 짧은 기간에 가장 빠릅니다.
Caleb

@Caleb : 동의합니다. 마감일이 마감일이라는 것만으로도 우아하다고 말한 적이 없습니다. 리팩터링 동안 나는 동일한 코드를 사용하여 여러 프로젝트를 인식하고 자신의 라이브러리로 옮깁니다. 그러나 문 밖으로 꺼내야 할 때 복사 붙여 넣기가 작동합니다. 또한 하나의 프로젝트를 수정할 수있는 유연성을 제공하며 라이브러리를 중단하고 견고하고 유연하게 만들고 싶을 때 이러한 변경 사항을 염두에 둡니다.
브래드 크리스티

1

때로는 몇 줄의 코드를 복사하여 붙여 넣는 것이 더 나은 해결책이라는 것을 알았습니다. 인간의 언어로도, 약간의 변형만으로 앞서 말한 문장을 말하고 싶을 때, 그 변형을 반복 할 것입니다. 왜냐하면 그것은 누구에게나 덜 문제가되기 때문입니다.

그러나 대형 모듈을 지원하지 않는 약간 다른 방식으로 사용해야하는 경우 몇 줄만 수정하기 위해 복제하지 마십시오. 기본 모듈과 미래에 복제 점유율. 대신, 기본 및 클론이 모두 사용할 다른 모듈로 공유하는 기능을 구성하거나 내보내십시오.


0

그것을 과도하게하지 마십시오. 확실하지 않은 경우, 무엇을 재사용 할 수 있는지 확인할 수있는 충분한 프로젝트를 작성할 때까지 애플리케이션 범위를 고수하십시오.

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