ما الاسم الذي يجب أن يكون له طريقة تعيد عدد الكائنات المتداخلة؟

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

سؤال

لنفترض أن لدينا معرض الفصول والصورة. يمكن أن يكون هناك العديد من الصور في معرض واحد.

يجب أن يحتوي المعرض على بعض الطرق التي تُرجع عدد الصور المتداخلة. اقتراحاتي:

int getImagesCount ();

int countImages ();

int imagesCount ();

لقد رأيت أمثلة على كل من هذه الاقتراحات الثلاثة في واجهات برمجة التطبيقات المختلفة (بالطبع مع اسم آخر أو حتى بدونها ، مثل الطريقة size () في مجموعات API).

ماذا تفضل ولماذا؟ (واحدة من أفكاري ضد countImages () هو أن هذا الاسم يمكن أن يجعل المستخدم يعتقد أن هذه الطريقة تقوم ببعض الحسابات المعقدة.)

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

المحلول

اقتراحي:

public interface Gallery {

    int getNumberOfImages();

    //...
}

أوافق على ذلك countXX() يؤدي إلى الانطباع ، أن استدعاء هذه الطريقة يؤدي إلى نوع من الحساب. لذلك لن أستخدمه هنا أيضًا.

نصائح أخرى

سأستبعد countImages () أيضا ، لنفس السبب.

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

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

من السهل حقًا تنفيذها:

  • إذا تم تمثيل الصور داخليًا بالفعل كقائمة ، فيمكنك فقط إرجاع ذلك (ملفوفة اختياريًا باستخدام Collections.UnmodiFiablElist).
  • وحتى إذا لم تقم بتخزينها كقائمة ، فتعرضها على أنها List<Image> سهلة مثل كتابة فئة فرعية صغيرة من AbstractList عن طريق تجاوز size() و get(int), ، الطريقتين اللتين كنت ستنفذهما على أي حال.

المشكلة مع size() هو أنه ليس من الواضح بالضرورة ما إذا كنت تعيد عدد العناصر (الصور في هذه الحالة) أو الحجم بالبايت/كيلوايت/ميغابايت من المجموعة. لنفس السبب ، أميل إلى التفضيل getImageDimensions() ل getImageSize(). في حالتك ، أحب countImages() لأنه واضح وموجز ، لكنه لا يتبع اتفاقيات التسمية إذا كانت هناك طرق مثل getImage(int). لذلك ، سأضطر إلى الذهاب مع int getImagesCount() أو أفضل ، int getNumberOfImages() أو int getNumImages()

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