هل يجب أن أستخدم أسماء الفصول الدراسية (الأمثل) التي تتعارض مع أسماء .NET BCL؟

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

سؤال

ربما لا يكون هذا الموقف غير مألوف تمامًا بالنسبة لبعضكم: لديك بعض الوظائف لوضعها في الفصل ولكن الاسم المثالي (*) يتم أخذها من قبل إحدى الفصول في System مساحة الاسم أو مساحة الاسم/الفئة الأخرى التي ليس لك ولكن أنت using/importعمل.

(*) بالكمال أعني أسماء صغيرة وموجزة وواضحة.

على سبيل المثال لدي Utils الطبقة التي لديها ملف Diagnostics (معظمهم من شركات التصحيح) فئة و Drawing صف دراسي. استطيع:

  1. عند DrawingUtils الطبقة و DiagnosticsUtils الطبقة ، ولكن هذا فقط رائحته مثل الهيكل السيئ.
  2. اختر thesaurus ويتم ذلك باسم أسوأ أو أطول أو محرج لم يتم أخذه بعد.
  3. اكتب أسماء الفصل بلغتي الأم بدلاً من اللغة الإنجليزية.
  4. اسأل الرجال الأذكياء في Stackoverflow.

أعتقد أن الخيارات 1-3 ليست واعدة :(

تعديل:

نظرًا لأن إجابتي المختارة لا تتناول المشكلة بشكل قاطع (لا أفعل) ، ما أوصي به للأشخاص الذين يواجهون نفس الموقف هو أن تسأل أنفسكم: هل ستستخدم في كثير من الأحيان فئة/مساحة الاسم المتضاربة؟ إذا كان لا ، فدع اسمك يتعارض (كما فعلت مع التشخيص). إذا كانت الإجابة بنعم ، أضف كلمة حدود إمكانيات مساحة الفصل/الاسم.

في الممارسة العملية ، هذا يعني:
"Drawing": شيء يرسم.
"MyCustomControlDrawing": شيء يرسم فقط على MyCustomControl. على سبيل المثال: "WidgetDrawing".

EDIT2:

حل آخر لإلقاء نظرة على المرة القادمة: طرق التمديد (من باب المجاملة قاطعة العشب).

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

المحلول

استخدم مساحات الأسماء لعرض فصولك من الفصول في مساحات أسماء أخرى. إما استخدام أسماء مؤهلة بالكامل أو عبارة تستخدم تخبر التجميع بما تحتاجه:

using Type = MyReallyCoolCustomReflector.Type;

الآن إذا كنت تريد استخدام فئة النوع من مساحة اسم النظام:

System.Type sysType = anObject.GetType();

بشكل عام ، أحاول تجنب التكرارات ولكن هذا لا يعمل دائمًا بهذه الطريقة. أنا أيضا أحب رمز بسيط وقابل للقراءة ويمكن صيانته. لذلك في كثير من الأحيان هو قرار المفاضلة.

نصائح أخرى

لا أرى أي مشكلة في الحفاظ على الأسماء Drawing, Diagnostics إلخ. هذا أحد أغراض مساحات الأسماء ، لحل النزاعات التسمية.

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

using MyAlias = My.Custom.Namespace;

هذا سيبقي فصولك منفصلة عن Microsoft.

يمكنك بعد ذلك الرجوع إلى فصولك كـ

MyAlias.Diagnostics

أو يمكنك بدلاً من ذلك تعيين الاسم المستعار إلى مساحة اسم Microsoft ، لكنني لا أوصي بذلك لأنه سيوضح المطورين الآخرين.

بالنسبة لي ، الأمر لا يستحق حقًا مشاحنات كتابة أسماء الفصل المتضاربة عن قصد. سوف تخلط بين المطورين الآخرين الذين ليسوا على دراية بقاعدة الكود الخاصة بك ، لأنهم سيتوقعون استخدام فئات BCL ولكن ينتهي بهم المطاف معك بدلاً من ذلك (أو العكس). ثم ، أنت فقط تضيع وقتهم عندما يتعين عليهم الكتابة المحددة using اسماء مستعارة.

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

تعديل: أنا أيضًا لا أعتقد أن "Small" هو مكون من معرف "مثالي". موجز وواضح ، بالتأكيد ، ولكن إذا استغرق الأمر اسمًا أطول لنقل الغرض من بنية معينة ، فليكن ذلك. لدينا Intellisense ، بعد كل شيء.

حسنًا ، إذا كنت ترغب في تجنب تصادم مساحة الاسم ، فهناك بعض الأشياء التي يمكنك القيام بها:


  • لا تصطدم ، بدلاً من ذلك ، اختر اسمًا فريدًا.

مثال:

إذا كنت تقوم بإنشاء فصل رياضيات يمكنك تسميتك CamiloMartin.MathHelper


  • استخدم مساحة الاسم الطويلة للتمييز بين التجمعات.

مثال:

public class MyClass
{
    public int SomeCalculation(int a, int b)
    {
        return MyNamespace.Math.SomeFunc(a, b);
    }
}

  • باستخدام الاسم المستعار للتمييز.

مثال:

using System.Math;
using SuperMath = MyNamespace.Math;

namespace MyNamespace
{
    public class MyClass
    {
        public int SomeCalc(int a, int b)
        {
             int result = Math.abs(a);
             result = SuperMath::SomeFunc(a, b);

             return result;
        }
    }
}

فقط للسجل:. NET Framework لا يحتوي Utils ولا Diagnostics صف دراسي. (ولكن لديه System.Diagnostics مساحة الاسم.)

أنا شخصياً لا أحب فصول الأغراض العامة مثل Utils نظرًا لأن أساليبهم غير قابلة للاكتشاف للغاية (وعادة ما تكون عامة جدًا أو محددة للغاية) ، فإنني أبرر استخدامها فقط كما هو الحال في الفصول الداخلية.

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

في كثير من الأحيان من الممكن اختيار اسم أكثر تحديدا. يأخذ Utils فمثلا. بالتأكيد يمكن أن يطلق على كل شيء utilitiy. لقارئ رمز الخاص بك هذا الاسم الفئة لا قيمة له.

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

على العموم:

  1. هذا ما نقوم به (مهلا ، يمكننا إعادة تشكيله لاحقًا)

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

  3. لا تفكر في هذا ...

استخدام الاسم المستعار مساحة الاسم ليس متعة. لذلك أتجنب ذلك إذا استطعت.

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