데이터를 검증 할 때 사이클로틱 복잡성을 줄이는 가장 좋은 방법은 무엇입니까? [닫은

StackOverflow https://stackoverflow.com/questions/204742

문제

지금은 NULL 결과를 반환 할 가능성이있는 데이터베이스에서 상당한 양의 데이터를 수신하는 웹 응용 프로그램을 연구하고 있습니다. 적용에 대한 사이클로틱 복잡성을 겪을 때 많은 함수의 무게가 10-30 사이입니다. 대부분의 경우 숫자가 많은 기능의 대부분은 다음과 비슷한 선이 많이 있습니다.

If Not oraData.IsDBNull(4) Then row("Field") = oraData.GetString(4)

내 질문으로 이어지는 것은이 숫자를 내려 놓는 가장 좋은 방법은 무엇입니까? 지금은 10 미만의 기능의 대부분을보고 있습니다.

도움이 되었습니까?

해결책

사용은 어떻습니까 확장 방법.

Imports System.Runtime.CompilerServices

Module Extensions

    <Extension()> _
    Public Function TryGetString(ByVal row As IDataRecord, i As Integer) As String
        If row.IsDBNull(i) Then
            Return null
        End If
        Return row.GetString(i);
    End Function

End Module

그런 다음 간단히 쓸 수 있습니다.

row("Field") = oraData.TryGetString(4)

이것은 부드럽게 읽히고 기능에 대한 사이클로틱 복잡성을 줄입니다.

다른 팁

다음과 같은 기능으로 분해됩니다.

//Object Pascal
procedure UpdateIfNotNull( const fldName: String; fldIndex : integer );
begin
  if oraData.IsDBNull( fldIndex ) then
    row( fldName ) := oraData.GetString(fldIndex);
end;

물론 "oradata"및 "row"를 매개 변수로 전달할 수 있도록 프로 시그시그 시그니처를 확장 할 수 있습니다.

첫 번째 질문은 : 왜 CC에 "매달린"이유는 무엇입니까? 코드가 얼마나 밀도가 높은지 평가하는 도구이며 "CC 번호의 너무 높지 않아야합니다".

아마도 "if"s와 그 숫자를 가져 오는 모든 것을 누르고있을 것입니다. 따라서 널을 처리하거나 쿼리를 변경하는 결과 세트에서 데이터를 추출하는 랩 함수를 호출하여 IFS 숫자를 줄이면 NULLS를 반환하지 않습니다.

널은 정보를 제공하고 쓸모가 없다는 점을 명심하십시오. 예를 들어 공화당 또는 민주당 원? Null을 사용하면 선택의 여지가 없다고 말합니다.

당신은 보셨습니까? 이 질문? 그는 비슷한 것을 묻고 있습니다 (그러나 나는 더 기본적인 수준에서 생각합니다) ... 그러나 그 대답은 여기에 큰 도움이되지 않을 수 있음을 의미합니다.

나는 다른 제안에 확실히 동의 할 것입니다. 함수/절차에 깔끔하게 포장 될 수있는 반복 된 진술이 있다면, CC를 바꾸는 것이 아니라면 하나의 접근 방식 일 수 있습니다. CC가 15, 10 및 10의 CC를 가진 35 대의 CC로 1 개의 프로에서 이동하면 너무 많이 얻었는지 확신 할 수 없습니다. 시스템의 해당 영역에서 총 CC를 줄이기 위해 더 큰 범위에서 무언가를 단순화하려면.)

리팩터가 가능합니다 만약에 CC를 줄이기 위해 별도의 유틸리티 기능으로. 다른 데이터베이스 유형 (문자열, int 등)을 처리하려면 유형 차별화에 의존하는 여러 기능 또는 기능이 필요할 수 있습니다.

그러나 모든 솔루션은 유지 관리가 적거나 읽기 쉬운 코드를 초래할 것이라고 주장합니다 (즉, 다른 메트릭을 악화시킬 수 있습니다!) QA 가이 정당성에 따라 통과 할 수있게 될 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top