리팩토링을 하지 않을 때 일어나는 일

지금까지 본 것 중 가장 우스꽝스럽게 나쁜 코드라고 생각되는 코드를 방금 발견했습니다. 가장 좋은 부분은 중괄호가 포함된 길이가 6줄에 불과하다는 것입니다. 다음과 같습니다.

private readonly IMemoryCache _cache;

public object Modify(string code, bool Flag)
{
    object result;
    if (_cache.TryGetValue(code.ToLower(), out result))
    {
        return true;
    }

    return Flag;
}


이제 제가 매일 사용하는 언어는 C#이므로 여기에서 여러분이 인식하지 못할 수 있는 사항이 있을 수 있지만 이 스니펫에서 (제 생각에) 잘못된 모든 것을 깨고 수정하겠습니다!

반환 유형



정확히 왜 우리가 돌아오고 있습니까object ? 우리는 이것이 부울을 반환할 것이라는 것을 알고 있습니다. 어떻게 알 수 있습니까? 이 코드가 캐시에 있으면 true를 반환하거나 Flag를 반환하지만 Flag는 bool입니다.

메서드 이름



우리는 메서드를 간단하지만 가능한 한 설명적으로 만들려고 노력합니다Modify는 간단합니다. 하지만 메서드 내부를 살펴보면 아무것도 수정되지 않았음을 알 수 있습니다(이제 이 함수를 호출하는 코드는 다른 클래스의 속성) 따라서 이 메서드 이름이 메서드 내부의 논리를 설명하지 않는다고 말할 수 있습니다.

이제 우리는 이 함수가 무엇을 하는지 자문해야 합니다. 코드에 대한 일종의 캐시를 확인하는 것입니다. 해당 코드가 캐시에 있으면 true를 반환하고 그렇지 않으면 플래그 값을 반환합니다. 아마도 CheckCacheForCode와 같은 것일 수도 있습니다. 제가 아는 것은 Modify보다 이 방법에 대해 훨씬 더 설명적인 이름이라는 것입니다.

매개변수



이것은 분명히 원래 매개변수의 이름이 아닙니다. 이 코드에 대해 설명하기 위해 이름을 난독화해야 했습니다. 이것은 OSS 라이선스가 없는 상용 소프트웨어이기 때문입니다. 하지만 이름의 정신을 포착하려고 노력했습니다.

여기서 빠른 제안 - 변수 이름에 대한 파스칼 케이스이므로 Flagflag가 됩니다.

첫 번째 줄



이제 이 줄은 한동안 C#을 만지지 않은 사람들에게는 명확하지 않을 수 있지만 다음과 같습니다.

object result;


우선 다시 object로 - 그냥 멍청하게 만드세요! 그런데 여기서 이것을 정의하는 이유는 무엇입니까? 우리는 다음과 같이 할 수 있습니다.

_cache.TryGetValue(code.ToLower(), out var result)


그러나 다시 이 변수를 사용하지도 않으므로 폐기를 사용할 수 있습니다.

_cache.TryGetValue(code.ToLower(), out _)


다시 이 기능은 C#의 최신 기능이지만 거기에 있으므로 사용하십시오.

if 문



이제 남은 것은 다음과 같습니다.

if (_cache.TryGetValue(code.ToLower(), out _))
{
    return true;
}

return Flag;


따라서 if 문을 제거할 수 있습니다.

return _cache.TryGetValue(code.ToLower(), out _) || Flag;


결과



우리는 다음에서 갔다:

private readonly IMemoryCache _cache;

public object Modify(string code, bool Flag)
{
    object result;
    if (_cache.TryGetValue(code.ToLower(), out result))
    {
        return true;
    }

    return Flag;
}


에게

public bool CheckCacheForCode(string code, bool flag)
{
    return _cache.TryGetValue(code.ToLower(), out _) || flag;
}


코드에 대해 조금만 생각하면 됩니다.

읽어주셔서 감사합니다

제이

좋은 웹페이지 즐겨찾기