2010-12-30 2 views
0

이것은 어떤 언어와도 관련이없는 일반적인 디자인 문제입니다. 나는 최소한의 코드 나 최적의 조직으로 갈 때까지 약간 찢어진 다.디자인 - 새로운 기능을 만들 때?

예를 들어 현재 프로젝트를 사용하겠습니다. 다른 기능을 수행하는 양식에 여러 개의 탭이 있습니다. 탭 1은 특정 레이아웃의 파일을 읽습니다. 탭 2는 파일을 특정 위치로 내 보냅니다. 등등. 지금 실행하고있는 문제는이 탭이 파일의 내용에 따라 약간 다르게해야한다는 것입니다. 변하기 쉬운. 그것이 1을 포함하고 있다면 레이아웃 A를 사용하고 여분의 연결을 수행해야 할 수도 있습니다. 2가 포함되어 있다면 레이아웃 B를 사용하고 연결을하지 않아도되지만 2 개의 정수 필드를 추가해야합니다. 10+ 코드가있을 수 있습니다. 찾고있을거야.

초기 코드마다 개별 경로를 만들거나 절대적으로 필요한 경우에만 분기하는 단일 경로를 만드는 것이 더 바람직합니까?

각 코드에 대한 개별 경로를 작성하면 코드를 한 눈에 파악하기가 매우 쉬워지고 나중에 디버깅 또는 변경 작업을 수행하는 데 도움이됩니다. 단점은 여러 곳에서 동일한 함수 중 일부를 호출하여 작성된 코드의 양을 늘리는 것입니다 (예 : 모든 단일 코드에 대해 3, 5 및 9 단계가 정확히 동일 할 수 있음)

필요한 경우에만 분기하는 단일 경로가 조금 복잡해지며 한 눈에 따라갈 수 없지만 고유 한 단계에만 조건문을 배치하면 코드가 적어집니다.

경우에 따라 결정할 수 있지만 일반적으로 이전에 제작 된 프로그램을 제공 받으면 원하는 것을 선택하십시오.


편집 : 표현하는 데 도움이되는 간단한 이미지를 그렸습니다. 코드 1/2/3이 변수이며 그 아래의 줄은 그들이 취할 경로를 나타냅니다. 이 모든 단계는 연대순으로 수행되어야하므로 필수적으로 다른 기능을 적절한 순서로 호출하는 기능이 있습니다.

다른 경로

단일 경로를 만들기

alt text

단일 경로

alt text

+2

이것은 Programmers.SE에 속한 일종의 주관적인 질문입니다. –

+0

데이비드 감사합니다. 전에는 없었습니다. 지금 확인해보십시오. –

답변

3

그 것 지점 밖으로 조금 지저분하고 더 어려운 될 것입니다 필요한 경우에만 한 눈에 따라 달라 지겠지만, 나는를 만들 것입니다.조건부 만 배치하면 코드가 더 작음 단계가 고유합니다.

이 진술을 구매하지 않았습니다. 새로운 기능을 작성할시기를 결정할 때는 기교가 있습니다. 함수는 가능한 한 간단하고 재사용 가능해야합니다 (그러나 더 간단하지는 않습니다). 정답은 '분기를 많이하는 하나의 큰 파일'입니다.

적은 LOC (코드 줄)가 목표가되어서는 안됩니다. 가독성과 유지 보수성이 목표입니다. 함수를 만들 때 이름은 자체 문서화되어야합니다.코드 블록이 큰 경우에는 함수 이름이 자체 문서화되는 것과 같은 것을 수행하는 것이 좋습니다.

function doSomethingComplicated() { 
     stepOne(); 
     stepTwo(); 
     // and so on 
    } 

코드가 더 읽기 쉬울뿐만 아니라 코드의 각 세그먼트를 분리하여 쉽게 테스트 할 수 있습니다.

똑같은 방법을 호출하는 많은 메소드가있는 경우 좋은 OO 디자인과 디자인 패턴을 사용하여 같은 일을하는 함수의 수를 최소화 할 수 있습니다. "이 단점은 여러 곳에서 동일한 함수 중 일부를 호출하여 작성하는 코드의 양을 늘리는 것입니다 (예 : 모든 단일 코드에 대해 3, 5 및 9 단계가 정확히 수행 될 수 있습니다 .. 같은은 "

코드의 하나 개의 큰 블록을 시작하는 가장 큰 위험은 실제로 작은 단위로 리팩토링하지 얻으 함께 ....

EDIT 시작 오른쪽 길을 시작 않을 것입니다 - -

귀하의 사진에 대한 기본 클래스를 만들 것입니다. 기본 클래스는 추상 메서드를 사용하여 추상화됩니다. 하위 클래스는 추상 메서드를 구현하고 우리는 e 필요한 공통 기능. 물론, '추상적'을 귀하가 선택하신 언어로 대체하십시오.

+0

@ Eclyps19, 확실히 함수는 내부 분기를 할 수 있습니다. 그게 문제 없어. 이 문제는 지나치게 많은 기능을하는 대규모 기능을 가지고 있습니다. 함수가 두 가지 이상을 수행하는 경우 하나 이상의 함수로 분류해야합니다. – hvgotcodes

+0

죄송합니다 - 추가 한 후 원래 댓글을 삭제했습니다. 나는 각 방법이 단 하나의 기능만을 수행하도록 노력해야한다는 것에 동의하며, 대부분의 경우 모듈화가 진행된다. 원래 게시물에 사진을 추가했습니다. 내 코드는 연대순으로 실행해야합니다 (항상 1 단계에서 n 단계까지 진행됩니다). –

+0

@ Eclyps19, 내 대답이 업데이트되었습니다. – hvgotcodes

0

또 다시 끝난 질문에 대답하기는 어렵지만 다른 질문에 대해 희생 할 필요가 없다고 생각합니다.

OOP 기술을 사용하면 코드의 재사용 가능한 부분을 캡슐화하고 개체 별 동작을 처리하기위한 하위 클래스를 생성 할 수 있으므로이 문제를 해결할 수 있습니다.

1

당신은 항상 유일한 예외는 (생성 작업 물건의 처리량이 majorly 올바른 추상화/일반화를 설계에 의해 영향을) 초기 프로토 타입 인 상태, 일반화의 측면에 잘못을한다. 당신은 당신이 3 개의 다른 시간을 거의 같은 일을하는 경우 (코드를 유지하기 어려운 혼란에 이르게로서, 초기 프로토 타입 단계를지나 비 일반화 된 복제 지점의 혼란을 떠나, 그 일을 변경해야 결코해야한다,라고 한 , 당신은 거의 3 중 1을 바꾸는 것을 잊을 것입니다.)

0

개인적으로 나는 당신이 (당신의 API에 의해 가능한 경우), 상속 양식을 만들 (탭) 마스터 양식에 즉시 그들을 만들 탭 컨테이너에 agruments 및 embed을 통과 것 같아요.

양식을 상속 할시기와 기능을 표시/숨기기/추가/제거하는 데 사용할 인수 (코드)를 결정할시기는 사용자에게 달려 있지만 마스터 양식에는 의사 결정 및 인수 전달 및 포함 기능이 포함되어야합니다. 조직을 구현과 분리 할 수 ​​있습니다.

관련 문제