내 C++ 클래스 디자인에 대한 질문이 있습니다. 종종 나는 이와 같은 작은 문제에 직면 해 있으며 더 잘 받아 들여지는 것에 관해서 조언을 원합니다.기본 C++ 디자인
UDP를 통해 일부 장치의 온도를 모니터링하는 클래스가 있습니다. 장치가 데이터 패킷을 수신하면, "x \ n"을 stdout에 인쇄하여 수신되었음을 나타냅니다. 그런 다음 해당 패킷의 데이터를 확인하고 데이터가 장치의 온도가 너무 높음을 표시하지 않는지 확인하십시오. 너무 높으면 몇 가지 기능을 호출해야합니다. 그렇지 않으면 다른 기능을 호출해야합니다.
이enum temperature {TEMPERATURE_FINE, TEMPERATURE_EXCEEDED};
int main(int argc, char* argv[])
{
std::vector<std::string> args(argv+1, argv + argc);
if(!args.size())
cout << "No parameters entered.\n";
else
{
CTemperatureMonitor tempMonitor(args);
if(tempMonitor.MonitorTemperature() == TEMPERATURE_EXCEEDED)
tempMonitor.ActivateAlarm();
else
tempMonitor.DisableAlarm();
}
return 0;
}
tempMonitor.MonitorTemperature은() std::cout << "x\n"
를 호출 여기서 나는이 작업을 수행해야하는 경우
는 잘 모르겠어요. 따라서 std::cout << "x\n"
이 클래스에 내장되어 있습니다.
또는 : std::cout << "x\n"
이 클래스에 포함되지 않습니다
enum temperature {TEMPERATURE_FINE, TEMPERATURE_EXCEEDED};
int main(int argc, char* argv[])
{
std::vector<std::string> args(argv+1, argv + argc);
if(!args.size())
cout << "No parameters entered.\n";
else
{
CTemperatureMonitor tempMonitor(args);
temperature tempExceeded = tempMonitor.MonitorTemperature();
std::cout << "x\n";
if(tempExceeded == TEMPERATURE_EXCEEDED)
tempMonitor.ActivateAlarm();
else
tempMonitor.DisableAlarm();
}
return 0;
}
.
CTemperatureMonitor::ActivateAlarm()
및 CTemperatureMonitor::DisableAlarm()
을 호출하기 전에 std::cout << "x\n"
이 발생해야합니다.
나는 이것이 사소하고 단순한 것처럼 보일 수도 있지만, 정확히 어떤 것이 정확하게 클래스의 일부인지 궁금해합니다. 클래스가 표준 출력으로 출력해야합니까? 내가 다른 것과 상관없이 어떤 변화를 가져올 수 있습니까? 나는 이것에 대해 솔직하게 말하고 있는가?
또한 제쳐두고 전역 변수는 잘못된 실행으로 간주됩니다. 메인과 클래스 모두에서 온도 열거 형을 사용합니다. CTemperatureMonitor 클래스에서 한 번, 한 번 또는 두 번 전역 적으로 선언해야합니까? 이 질문은 다소 구체적으로 보일지라도 실제로는 나를 위해 훨씬 더 많은 것을 정리할 것입니다.
감사합니다.
단일 책임, 최소한의 결합, 모듈성 및 재사용 가능성에 대해 생각해보십시오. –
나를 위해 그것은 'x'가있는 줄이 무엇인지에 달려 있습니다. 온도의 상태와 관련이 있다면 CTemperatureMonitor 클래스에있을 것입니다. 그것이 다른 것들을위한 부분 일 뿐이라면 나는 그것을 수업 외부에 두었습니다. –
그냥 "나는 패킷을 받았습니다"라고 말합니다. 아무것도 더, 아무것도 덜. –