ما هي أفضل الممارسات لاستخدام "على" في طريقة أسماء ؟

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

  •  06-07-2019
  •  | 
  •  

سؤال

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

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

المحلول

ويتعلق الأمر الى انخفاض دلالات. نعم، C # لديه "خصائص" التي تعطيك الحصول على / مجموعة 'أسلوب' كعب ... ولكن وظائف (... "طرق" ...) في .NET Framework التي تبدأ ب "الحصول على" من المفترض أن فكرة و المطور إلى حقيقة أن بعض العمليات يحدث لغرض وحيد هو الحصول على بعض النتائج.

وأنت قد تعتقد أن هذا هو الغريب، ويقول "لماذا لا مجرد استخدام نوع الإرجاع للناس فكرة في؟"، والجواب بسيط. التفكير في الطرق التالية:

public Person CreatePerson(string firstName, string lastName) {...}

وفقط من خلال اسم هذا الأسلوب، وربما يمكنك معرفة أنه سيكون هناك نشاط قاعدة بيانات المعنية، وبعد ذلك تم إنشاؤها حديثا "شخص" سوف تعاد.

ولكن، ماذا عن هذا:

public Person GetPerson(string firstName, string lastName) {...}

وفقط عن طريق <م> أن اسم الأسلوب، وربما يمكنك أن تفترض 100٪ استرجاع "الآمن" لشخص من قاعدة بيانات يتم القيام به.

وأنت لن أسميه "CreatePerson" عدة مرات ... ولكن هل <م> يجب يشعر بالأمان أن نطلق عليه "GetPerson" في كل وقت. (يجب أن لا يؤثر على "الدولة" من التطبيق).

نصائح أخرى

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

أفضل الممارسات في جافا هو استخدام وتعيين البادئات خصائص.

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

لذا, إذا كان لديك فئة java مثل هذا...

public class User{
    private String name;
    public String getName(){ return name;}
    public void setName(String name){ this.name = name; }
}

..مع الدعامات-العلامات (أو أي الأخرى ognl علامة على المكتبة) سوف يمكنك الوصول إلى اسم المنشأة user.name.

إطار الربيع أيضا يستخدم هذه الاتفاقية في xml ملفات التكوين.

وجافا لا (حتى الآن) خصائص الدعم. حاصل على واضعي هي bodge للالتفاف حول هذا. لغات أخرى - بما في ذلك C # - خصائص الدعم ويجب عليك استخدام هذه بدلا من ذلك. هذه ليست مجرد "أفضل الممارسات" الشيء إما: سوف التسلسل في C # تعتمد على الخصائص، وليس حاصل على واضعي، لذلك لا تستخدم الخصائص يمكن أن تؤدي إلى كل أنواع المشاكل في المستقبل إذا كنت بحاجة إلى تسلسل الفصول الدراسية

وميزة لخصائص هي أنها تجعل رمز أكثر قابلية للقراءة. شيء من هذا القبيل

obj.setX(10);

وبلغة جافا، يصبح

obj.X = 10;

ولكن وراء الكواليس، X هو وسيلة، بدلا من أن يكون متغير وهكذا يمكن أن تؤدي التحقق من المدخلات القذرة وغيرها.

أنا شخصيا مثل القاعدة التالية:

  • استخدام get بادئة كلما القيمة مباشرة للتعديل مع المقابلة set طريقة
  • إسقاط get بادئة في الحالات التي تكون فيها قيمة هو شيء لا يمكنك تعيين مباشرة على الملكية (أيليس هناك ما يعادل setXXX طريقة)

منطق الحالة الثانية هو أنه إذا كانت قيمة ليس المستخدم القابل للتعيين "الملكية" على هذا النحو ، فإنه يجب أن لا تحتاج إلى الحصول على/مجموعة زوج من الأساليب.وهو يعني أنه إذا هذه الاتفاقية هو اتباع ترى getXXX الطريقة ، يمكن أن نفترض وجود setXXX الأسلوب أيضا.

أمثلة:

  • String.length() - منذ سلاسل ثابتة طول هو للقراءة فقط قيمة
  • ArrayList.size() - حجم التغييرات عندما يتم إضافة عناصر أو إزالتها ، لكن لا يمكنك تعيينها مباشرة

وكان عليه بالتأكيد أن هذا هو الحال الذي واجهات برمجة التطبيقات كثيرا ما يتعرض خصائص للقراءة فقط دون بادئة get: <لأ href = "http://java.sun.com/javase/6/docs/api/java/lang/ String.html # طول () "يختلط =" نوفولو noreferrer "> String.length() وحتى أحدث <لأ href =" http://java.sun.com/javase/6/docs/api/java/nio /Buffer.html#capacity () "يختلط =" نوفولو noreferrer "> Buffer.capacity() كونها أمثلة معقولة.

والاتجاه الصعودي من ذلك هو أن هناك أقل زغب المعنية. الجانب السلبي هو أن أي شيء يحاول تحديد خصائص تلقائيا استنادا إلى الاتفاقيات لن اكتشافها. شخصيا أنا <م> تميل ليتجه الى جانب بما في ذلك البادئة.

وبطبيعة الحال، في C # انها في معظمها غير ذي صلة كما أن هناك خصائص "الحقيقية" على أي حال:)

وهذا يعتمد. غالبا ما يكون من المعلومات الزائدة عن الحاجة، حتى في اللغات دون خصائص.

في C ++، بدلا من getAttr () / setAttr () زوج، ومن الشائع لتوفير اثنين الزائدة من وظيفة ATTR (): باطلا ATTR (فو و). // واضع فو ATTR ()؛ // وجالبة

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

الهدف C 2.0 يستخدم أيضا خصائص، وذلك باستخدام نفس بناء الجملة نقطة.

وقبل ذلك، كان عليه نظام تسمية مختلفة قليلا للحاصل على واضعي (التي، بطبيعة الحال، لا يزال من الممكن استخدامها مع خصائص أو سمات سهل القديمة).

value = [obj attr];

[obj setAttr:value];

[obj getAttr:&value];

وو، ويستخدم هذا يحصل بطريقة مختلفة. فإنه لا يرجع قيمة ولكن يخزن النتيجة في تمريرها في متغير.

ووجالبة نموذجي لديه نفس اسم السمة، واضع هي السمة مسبوقة من قبل مجموعة (كما في اتفاقية جاوة). وتستخدم هذه الاتفاقيات من قبل (الرئيسية ذات القيمة مراقبة) نظام المنظمة من، لذلك يجب الالتزام بها.

ومجرد الإضافة قصيرة: اتفاقية أخرى هي لحاصل الحقول المنطقية أن مسبوقة ب "هو" بدلا من "الحصول على"، على سبيل المثال bool isEnabled() { return enabled; }

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