나는 최근에 다음과 같은 상황에 처해있다.
class A{
public:
void calculate(T inputs);
}
첫째, A
물리적 세계의 물체를 나타내며, 이는 계급을 나누지 않는 강력한 주장입니다. 이제는 calculate()
길고 복잡한 기능으로 밝혀졌습니다. 나는 세 가지 가능한 구조를 인식합니다.
- 텍스트의 벽으로 작성하십시오-장점-모든 정보가 한 곳에 있습니다
private
클래스에서 유틸리티 함수를 작성 하고calculate
신체에서 단점을 사용하십시오-클래스의 나머지 부분은 그 메소드에 대해 알지 못하거나 돌 보거나 이해하지 못합니다calculate
다음과 같이 작성 하십시오.void A::calculate(T inputs){ auto lambda1 = () [] {}; auto lambda2 = () [] {}; auto lambda3 = () [] {}; lambda1(inputs.first_logical_chunk); lambda2(inputs.second_logical_chunk); lambda3(inputs.third_logical_chunk); }
이것이 좋은 습관인지 나쁜 습관으로 간주 될 수 있습니까? 이 접근 방식에 문제가 있습니까? 대체로 동일한 상황에 다시 직면 할 때 이것이 좋은 접근 방식으로 고려해야합니까?
편집하다:
class A{
...
public:
// Reconfiguration of the algorithm.
void set_colour(double colour);
void set_density(double density);
void set_predelay(unsigned long microseconds);
void set_reverb_time(double reverb_time, double room_size);
void set_drywet(double left, double right);
void set_room_size(double value);;
private:
// Sub-model objects.
...
}
모든 방법들 :
- 가치를 얻다
- 상태를 사용하지 않고 다른 값을 계산
- 상태를 변경하려면 "하위 모델 객체"중 일부를 호출하십시오.
를 제외 set_room_size()
하고 이러한 메소드는 단순히 요청 된 값을 하위 오브젝트에 전달합니다. set_room_size()
반면에, 모호한 수식의 두 화면을 수행 한 다음 (2) 하위 오브젝트 세터를 호출하는 화면의 절반을 수행하여 다양한 결과를 적용합니다. 따라서 함수를 두 개의 람다로 분리하고 함수 끝에서 호출합니다. 더 논리적 인 덩어리로 나눌 수 있다면 더 많은 람다를 분리했을 것입니다.
어쨌든, 현재 질문의 목표는 그러한 사고 방식이 지속되어야하는지 또는 가치를 추가하지 않는 것이 최선인지 결정하는 것입니다 (가독성, 유지 관리 성, 디버그 가능성 등).
Firstly, A represents an object in the physical world, which is a strong argument for not splitting the class up.
분명히 A
나타내는 데이터 객체에 대한 존재할 수 물리적 세계를. A
실제 객체 가 없는 인스턴스와의 인스턴스가 없는 실제 객체를 가질 수 있으므로 인스턴스를 A
동일하게 취급하는 것은 무의미합니다.
calculate()
그 하위 기능에 대해 알 것입니다.
A
와 관련이 있다면 약간의 오차가 있습니다.
A
실세계의 물체를 나타내며, 이것은 계급을 나누지 않는 강력한 주장입니다." 불행히도 나는 프로그래밍을 시작할 때 이것을 말했다. 말 하키라는 것을 깨닫기까지 몇 년이 걸렸습니다. 그것은의 끔찍한 그룹 것들에 이유. 나는 무엇을 명확하게 할 수 있습니다 (적어도 내 만족) 그룹 일에 좋은 이유가 있지만, 그 중 하나는 당신이 지금 당장 폐기해야 하나입니다. 결국 "좋은 코드"는 모두 올바르게 작동하고 이해하기 쉽고 상대적으로 변경하기 쉽다는 것입니다 (예 : 변경 사항에 이상한 부작용이 없음).