سؤال

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

productName::moduleName

الآن، إذا كانت الوحدة النمطية نوعًا من الوحدة النمطية المساعدة، فلا توجد مشكلة في إضافة مساحة اسم ثالثة.على سبيل المثال لإضافة "str":اسم المنتج::utilityModuleName::str - لتقسيم المساحة حيث ستوضع جميع العناصر ذات الصلة "بالسلاسل".

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

على سبيل المثال

class productName::mainModuleName::DomainObject

و

class productName::mainModuleName::DomainObjectSomethingElseViewForExample

يمكن أن يكون على حد سواء في

namespace productName::mainModuleName::domainObject
class Data
class ViewForExample

لماذا يجب علينا إنشاء فئات داخلية وليست خاصة وليس مساحات أسماء؟لماذا يجب علينا إنشاء فئة تكون فيها كافة الأساليب ثابتة (باستثناء الحالات التي تكون فيها هذه الفئة معلمة قالب)؟

يتكون المشروع من 1 جيجا بايت من كود المصدر.إذًا، ما هي أفضل ممارسة لتقسيم الوحدات النمطية على مساحات الأسماء في لغة c++؟

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

المحلول

ما هي مساحات الأسماء لـ:

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

قواعد عامة:

ليست هناك حاجة إلى تحديد الكثير من السياق وسيسبب المزيد من الإزعاج مما يستحق.

لذا فأنت تريد استخدام أفضل حكم لديك، ولكن مع ذلك اتبع هاتين القاعدتين:

  • لا تكن عامًا جدًا عند استخدام مساحات الأسماء
  • لا تكن محددًا جدًا عند استخدام مساحات الأسماء

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

لماذا لا تكون مساحات الأسماء العامة جدًا مفيدة:

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

لن تستخدم أيضًا مساحات أسماء Product2 داخل Product1، لذا فإن تحديدها بشكل صريح لا معنى له.إذا كنت تقوم بتضمين ملفات Product2 داخل Product1، فهل لا يزال تحويل التسمية هذا مفيدًا؟

لماذا لا تكون مساحات الأسماء المحددة جدًا مفيدة:

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

الفئات التي تحتوي على جميع القوالب الثابتة مقابل القوالب:

"لماذا يجب أن ننشئ فصولًا داخلية وليس مساحات أسماء؟لماذا يجب أن ننشئ فئات حيث تكون جميع الأساليب ثابتة "

بعض الاختلافات:

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

كيفية التقسيم بالضبط:

"يتكون المشروع من 1 جيجابايت من رمز المصدر.لذا ، ما هي أفضل الممارسات لتقسيم الوحدات النمطية على مساحات الأسماء في C ++؟ "

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

نصائح أخرى

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

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

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

أقوم بتقسيم مساحات الأسماء حسب استخداماتها:

لدي مساحة اسم منفصلة، ​​حيث قمت بتعريف جميع واجهاتي (فئات افتراضية خالصة).

لدي مساحة اسم منفصلة، ​​حيث قمت بتحديد فئات مكتبتي (مثل مكتبة db ومكتبة المعالجة).

ولدي مساحة اسم منفصلة، ​​حيث أمتلك كائنات العمل الأساسية (منطق الأعمال) (مثل buy_order، وما إلى ذلك).

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

وإذا كنت تعتقد أنهم بخير، فعليك أن تذهب معهم.

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