ما هي أفضل طريقة لتقليل التعقيد الدوري عند التحقق من صحة البيانات؟[مغلق]
-
03-07-2019 - |
سؤال
أعمل الآن على تطبيق ويب يتلقى كمية كبيرة من البيانات من قاعدة بيانات لديها القدرة على إرجاع نتائج فارغة.عند المرور بالتعقيد السيكلوماتي للتطبيق، يتراوح وزن عدد من الوظائف ما بين 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 الخ ..)
ومع ذلك، أود أن أزعم أن أي حل من شأنه أن يؤدي إلى كود أقل قابلية للصيانة أو القراءة (على سبيل المثال.قد تؤدي إلى تفاقم المقاييس الأخرى!) وسوف تسمح لها ضمان الجودة بالمرور وفقًا لهذا المبرر.