التنفيذ في الوظائف العالمية ، أو في فئة ملفوفة بالوظائف العالمية

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

سؤال

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

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

سؤال: هل سيكون من الأفضل أن أقوم بتطبيق فئة كبيرة واحدة مع 60 وظيفة عضو ، وقمت بجميع التنفيذ (الموجود الآن في الوظائف العالمية) هناك؟ وكل من الوظائف التي يجب أن أكتبها ستتصل فقط بوظيفة العضو المقابلة في الفصل.

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

المحلول

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

هذه هي نقطة المفاتيح. لا ، لا ينبغي لهم بالتأكيد وضعها في فصول. تصنع الفصول لاستخدامها لإنشاء كائنات. في وضعك ، ستستخدمها تمامًا ، للبيانات والوظائف. لكن هذا ما مساحات الأسماء بالفعل حل أفضل:

namespace stuff {
    ... 60 functions ...
    namespace baz {
        ... if you want, you can have nested namespaces, to ...
        ... categorize the functions ...
    }

    namespace data {
        ... you can put data into an extra namespace if you want ...
    }
}

يعد إنشاء فصول تتكون من أعضاء ثابتة فقط فكرة سيئة.

نصائح أخرى

هل يحتاج مستخدمو الكود الخاص بك حقًا إلى هذه الفئة الكبيرة؟

إذا كانت الإجابة بنعم ، فطبقها.

إذا كان لا ، لا تضيع وقتك في تنفيذها ولا تضيع وقت الآخرين في اختباره أو محاولة فهم ما هو الدور الدقيق لهذه الفئة خارج مظهر OOP.

litb ربما يكون صحيحا. السبب الوحيد الذي تجعلك تفكر حتى في لف class حول مجموعة من الوظائف المجانية إذا كنت بحاجة إلى إرفاق بعض بياناتك الخاصة للاستخدام في الأغلفة الخاصة بك. الشيء الوحيد الذي ينبثق في رأسي هو إذا احتجت إلى مقبض إلى ملف سجل أو شيء مشابه في الأغلفة.

في ملاحظة ذات صلة ، حارب إغراء using namespace stuff;! الرجوع دائمًا إلى الوظائف باستخدام مؤهل مساحة الاسم:

#include <stuff.h>
void some_function() {
    stuff::function_wrapper();
}

بدلاً من:

#include <stuff.h>
using namespace stuff;
void some_function() {
    function_wrapper();
}

الفائدة هي أنه إذا كنت بحاجة إلى تحويل namespace إلى فصل مليء static الطرق ، يمكنك القيام بذلك بسهولة.

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

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