ما الخطأ في هذا الرمز؟ إنشاء متغير حذف في نطاقات مختلفة

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

  •  05-07-2019
  •  | 
  •  

سؤال

ورأيت مؤخرا بعض التعليمات البرمجية مماثلة لتلك المبينة أدناه.

public void someMethod() {
  Lecture lect = createLecture();

  ...

  lect.getLectureSeries().delete();
}


public Lecture createLecture() {
  LectureSeries series = new Series();
  Lecture lect = new Lecture(series);

  ...

  return lect;
}

وهذه النقطة هي أن بعض وجوه (في هذه الحالة LectureSeries) التي تحتاج إلى حذف في نهاية الدعوة إلى someMethod () تم إنشاؤه فعلا في الدعوة إلى طريقة أخرى. أحاول أن أشرح لماذا كان ينبغي أن تنشأ في نفس النطاق في نهاية المطاف سيتم حذفه. أي

public void someMethod() {
  LectureSeries series = new Series();
  Lecture lect = createLecture(series);

  ...

  series.delete();
}


public Lecture createLecture(LectureSeries series) {
  Lecture lect = new Lecture(series);

  ...

  return lect;
}

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

و== تحرير ==

والقضية قيد البحث وطريقة الاختبار تنظيف حتى يصل أي شيء قد تم إنشاؤها أثناء تنفيذ الاختبار المهم. أعتقد أن على الرغم من أن الآثار الجانبية غير المرغوب فيها من LectureSeries يتم إنشاؤه نتيجة الدعوة إلى createLecture () لا يزال شيء في محاولة لتجنب في معظم الحالات.

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

المحلول

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

في اللغات القمامة التي تم جمعها، والتغلب حتى يعتني نفسها.

في اللغات حيث يجب على مبرمج إدارة تنظيف أنفسهم، يجب على مبرمج فهم ملكية الكائن التي يتلقونها من طريقة واجباتهم بخصوص إطلاقه.

نصائح أخرى

ويمكنك استخدام حجة "عكس السيطرة". الكائن محاضرة يحتاج كائن LectureSeries وأنه من الأفضل هذا الكائن ليتم حقنه في ذلك بدلا من خلق هذه المشكلة في حد ذاته.

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

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