참고 : 코드 샘플은 C #으로 작성되었지만 중요하지 않습니다. 더 적합한 태그를 찾을 수 없기 때문에 C #을 태그로 넣었습니다. 이것은 코드 구조에 관한 것입니다.
Clean Code를 읽고 더 나은 프로그래머가 되려고 노력하고 있습니다.
나는 종종 특히 기능에서 단일 책임 원칙 (클래스와 함수가 한 가지만 수행해야 함)을 따르는 데 어려움을 겪고 있습니다. 어쩌면 내 문제는 "한 가지"가 잘 정의되어 있지 않지만 여전히 ...
예 : 데이터베이스에 Fluffies 목록이 있습니다. 우리는 플러피가 무엇인지 상관하지 않습니다. 나는 수업이 fluffies를 복구하기를 원합니다. 그러나 일부 논리에 따라 플러 프가 변경 될 수 있습니다. 일부 논리에 따라이 클래스는 캐시에서 데이터를 반환하거나 데이터베이스에서 최신을 가져옵니다. 우리는 그것이 fluffies를 관리한다고 말할 수 있습니다. 그리고 그것은 한 가지입니다. 간단하게하기 위해로드 된 데이터가 한 시간 동안 지속되고 다시로드되어야한다고 가정 해 봅시다.
class FluffiesManager
{
private Fluffies m_Cache;
private DateTime m_NextReload = DateTime.MinValue;
// ...
public Fluffies GetFluffies()
{
if (NeedsReload())
LoadFluffies();
return m_Cache;
}
private NeedsReload()
{
return (m_NextReload < DateTime.Now);
}
private void LoadFluffies()
{
GetFluffiesFromDb();
UpdateNextLoad();
}
private void UpdateNextLoad()
{
m_NextReload = DatTime.Now + TimeSpan.FromHours(1);
}
// ...
}
GetFluffies()
나에게 괜찮아 보인다. 사용자가 몇 개의 플러 프를 요청하면 제공합니다. 필요한 경우 DB에서 복구하려고하지만 플 루프를 얻는 것의 일부로 간주 될 수 있습니다 (물론 다소 주관적입니다).
NeedsReload()
옳은 것 같습니다. 플러피를 다시로드해야하는지 확인합니다. UpdateNextLoad는 괜찮습니다. 다음 재 장전 시간을 업데이트합니다. 그것은 확실히 하나의 것입니다.
그러나 나는 LoadFluffies()
한 가지로 설명 할 수없는 것을 느낍니다 . 데이터베이스에서 데이터를 가져오고 다음 재로드를 예약합니다. 다음 재로드 시간을 계산하는 것이 데이터를 얻는 것의 일부라고 주장하기는 어렵습니다. 그러나 더 나은 방법을 찾을 수는 없습니다 (함수의 이름을 바꾸면 LoadFluffiesAndScheduleNextLoad
문제가 더 분명해집니다).
SRP에 따라 실제로이 클래스를 작성하는 우아한 솔루션이 있습니까? 내가 너무 장난이 되나요?
아니면 내 수업이 실제로 한 가지 일을하지 않습니까?
DateTime.UtcNow
일광 절약 전환 또는 현재 시간대의 변경을 피하기 위해 사용 합니다.