ما هي أفضل طريقة لتقليل التعقيد الدوري عند التحقق من صحة البيانات؟[مغلق]

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

سؤال

أعمل الآن على تطبيق ويب يتلقى كمية كبيرة من البيانات من قاعدة بيانات لديها القدرة على إرجاع نتائج فارغة.عند المرور بالتعقيد السيكلوماتي للتطبيق، يتراوح وزن عدد من الوظائف ما بين 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" و "الصف" يمكن تمرير كمعلمات.

والسؤال الأول هو: لماذا أنت "معلقة" حتى على CC؟ إنها أداة لتقييم مدى كثافة هو رمز وكقاعدة عامة يجب أن يكون "ليست عالية جدا عدد سي سي".

وانها ربما ضرب كل تلك "IF" ليالي وتنشئة هذا العدد - حتى تقلل من عدد من المحاذير التي كتبها استدعاء دالة التفاف أن استخراج البيانات من مجموعة النتائج التي يعالج خالية أو تغيير الاستعلام لذلك لا العودة بالقيم الخالية.

ونضع في اعتبارنا أن القيم الخالية لا توفر المعلومات ولا طائل منه. على سبيل المثال الجمهوري أو الديمقراطي؟ باستخدام يقول باطلا ولا خيار.

هل رأيت هذا السؤال ؟ ويسأل شيئا من هذا القبيل (ولكن أعتقد على مستوى أكثر الأساسي) ... ولكن بعد ذلك وهذا يعني الإجابات قد لا يكون هناك الكثير من المساعدة هنا.

وأود أن نتفق بالتأكيد مع اقتراحات أخرى هنا: إذا كان هناك تكرار التصريحات التي يمكن تعبئتها بدقة إلى وظائف / الإجراءات، التي قد تكون نهج واحد على أن تتخذ، طالما أنك لا مجرد تحويل CC حولها. أنا لست متأكد من أنك قد اكتسبت كثيرا إذا انتقلت من بروك واحد مع CC من 35 إلى ثلاثة procs مع بطاقات الإئتمان من 15 و 10 و 10. (انها ليست الخطوة الأولى سيئة، ولكن من الناحية المثالية تريد ان تكون قادرة لتبسيط شيء على نطاق أكبر لخفض CC الإجمالي في هذه المنطقة من النظام الخاص بك.)

من الممكن إعادة بناء لو في وظيفة أداة مساعدة منفصلة لتقليل CC الخاص بك.قد تكون هناك حاجة لعدد من الوظائف أو وظيفة تعتمد على تمايز النوع للتعامل مع أنواع قاعدة البيانات المختلفة (سلسلة، int الخ ..)

ومع ذلك، أود أن أزعم أن أي حل من شأنه أن يؤدي إلى كود أقل قابلية للصيانة أو القراءة (على سبيل المثال.قد تؤدي إلى تفاقم المقاييس الأخرى!) وسوف تسمح لها ضمان الجودة بالمرور وفقًا لهذا المبرر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top