سؤال

يتم تعطيل أساليب المرافق الثابتة عموما من قبل مسحات النظر OO.

كنت أتساءل ولكن ما يشعر الناس به حول أساليب المرافق المستخدمة لتجنب شيء بسيط مثل التحقق الفارغة في جميع أنحاء التطبيق.

String.trim() يلقي NPE عند الاحتجاج في سلسلة فارغة. لذلك يجب علي القيام به:

if(str!=null) 
     setValue(str.trim());
else
     setValue("");

ماذا لو قمت بإنشاء طريقة فائدة الشيكات عن NULL؟

setValue(myTrim(str));

public static String myTrim(String str) {

  if(str==null) return "" 

  else return str.trim();
}

المشكلة الوحيدة التي واجهتها مع طرق مثل هذه هي أن بعض المطورين في الفريق قد لا يعجبك / لا يعرفون هذه الأداة المساعدة وقد تقوم بمكالمات STAIGHT بعد القيام بمقارنة فارغة.

هل هذا شيء تقوم به الإطار الخاص بك أيضا؟ إذا كانت الإجابة بنعم، فما هي أساليب الاستخدام العام للأداة المساعدة الشائعة التي أنشأها الأشخاص وتستخدمها في تطبيقاتهم؟

ماذا تشعر أن إيجابيات وسلبيات أي منهما؟

هل كانت مفيدة؟

المحلول

سأتميل إلى استبدال الاستخدامات المنزلية عندما كتبت مكتبة موجودة (مثل Apache Commons Blah Blah Blah) بالفعل. الرمز يمكنك التفريغ إلى شخص آخر يتيح لك التركيز على الأجزاء المهمة من البرنامج يميز عملك حقا من أي شخص آخر. ولكن نعم، فئات المرافق ذات الأساليب الثابتة رائعة، إذا كان بحاجة إلى أن تكون مكتوبة بك على الإطلاق.

لمعلوماتك، إلقاء نظرة على stringutils.trimteempty (). وبعد حظ سعيد.

نصائح أخرى

قد لا يعجبك بعض المطورين في الفريق / عدم معرفة هذه الأداة

هذا ما هو التواصل جيد ل. وأنا لا أقصد البريد الإلكتروني.

يتحدث عن هذا النوع من الوظائف، وربما يفعل أعضاء الفريق الآخرون نفس الشيء ولا ينتقلون إليك التعليمات البرمجية التي يبذلونها الجهود.

قد تجد طريقة لاستخدام أساليب المرافق هذه أو حتى بعض المطور الأكثر خبرة، لقد قامت Migth بالفعل بتطوير ليب أكثر نضجا أو استخدم طرفا ثالثا.

ولكن بكل الوسائل، التواصل مع الخاص بك فريق

أنا لست مسجون أوو. لذلك أنا أحب الاشياء مثل هذا. أي شيء يجعل من السهل كتابة التعليمات البرمجية التي تعكس نواياي دون التعرض في تفاصيل غير ذات صلة.

أكتبه. استخدامها بنفسك. لا تكون خجولة - يتظاهر كم منظف يجعل التعليمات البرمجية الخاصة بك. أسوأ الحالات، على الأقل ستكون أقل قليلا التكرار في لك الشفرة...

من حيث مبدأ التصميم، هناك بعض الأشياء التي هي أساليب ثابتة أكثر منطقيا. إذا كانت فئة المرافق التي تكتبها لا تملك حقا أي "حالة"، وتشعر أكثر منطقية لجعلها غير قابلة للاحتفال بمجموعة من الأساليب الثابتة، ثم تفعل ذلك من هذا القبيل. ولكن تأكد من أن صفك غير قابل للاسترداد حقا (أعطيه منشئ خاص؛ لقد رأيت الناس يعلنون الطبقة مجردة، ولكن هذا ليس جيدا لأن الناس يمكنهم تجاوزه).

المشكلة التي تحصل عليها بعد ذلك إذا كان فصلك على مستوى المشروع، فأنت بحاجة إلى التعامل معها كصف مكتبة. وبعد ومكتبات الكتابة تختلف عن كتابة الرمز العام:

  • بشكل عام، يجب عليك التعريف بدلا من تحسين الأوان؛ ولكن في طريقة المكتبة، لا يمكنك التنبؤ بكيفية استخدام الأشخاص مكالمتك في المستقبل؛
  • يجب أن تكون حذرا للغاية للوثيقة أو تسميتها بوضوح ما تفعله طريقتك؛
  • تحتاج إلى إعطائها نوعي السلوك، وعدم أن أعمى من خلال بعض الميزات المحددة التي تحتاجها في تلك اللحظة (على سبيل المثال، إذا كان لديك طريقة ل "قميص سلسلة"، فماذا تفعل مع الرموز الفارغة؟ إذا أنت بحاجة إلى تجاهلها، وسوف آخر المتصلين إلى طريقتك؟)

لدي بعض الطبقات التي تحتوي فقط على طرق ففت ساكنة - هم فعل من المنطقي أن يكون. يمكنك وضع اختبارات وحدة واسعة النطاق تحقق من أي وكل ظروف الحدود.

في الحالة التي وصفتها، لن تكون أفضل لجعل طريقة SetValue تقبل أي سلسلة تم إرسالها إليها؟ يمكن أن تقوم هذه الطريقة بتطبيق سلسلة فارغة افتراضية أو تقليمها أو حتى رمي استثناء إذا كانت القيمة غير صحيحة.

يمكن ل Javadoc على هذا الروتين أن يذكر بوضوح ما هي المدخلات صالحة / غير صالحة وما يحدث للمدخلات غير الصالحة.

لا يقول هذا صحيح - مجرد وجهة نظر أخرى

يمكنني استخدام العديد من وظائف المرافق. هناك بعض الأشياء التي لا تحتاج فقط "كائنات"، لكنني لا أحب المثال الخاص لديك من تقليم ().

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

setValue((str != null) ? str.trim() : "")

بالنسبة لي، يعد NPE غير قديم مؤشرا جيدا على وجود خطأ كبير في التطبيق!

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