C# بناء جملة - الممارسة المفضلة لديك للحصول على 2 أو 3 إجابات من طريقة

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

سؤال

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

1) إرجاع كائن [
2) إرجاع فئة مخصصة
3) استخدم كلمة رئيسية أو مرجعية على متغيرات متعددة
4) اكتب أو استعارة (F#) tuple <> فئة عامة
http://slideguitarist.blogspot.com/2008/02/whats-f-tuple.html

أنا أعمل على بعض التعليمات البرمجية التي يتم تحديث البيانات. من الطريقة التي يقوم بها التحديث الذي أود أن أعود إليه (1) تحديث وقت البدء و (2) وقت الانتعاش.
في وقت لاحق ، قد أرغب في نقل قيمة ثالثة.

أفكار؟ أي ممارسات جيدة من مشاريع .NET مفتوحة المصدر حول هذا الموضوع؟

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

المحلول

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

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

نصائح أخرى

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

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

لشخصين ، عادة 4)

أكثر من ذلك ، 2)

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

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

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

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

لأي شيء أكثر تعقيدًا ، عادةً ما أقوم بإنشاء بنية/فئة مخصصة.

أعتقد أن الطريقة الأكثر شيوعًا للمبرمج C# سيفعل ذلك هي لف العناصر التي تريد إرجاعها في فصل منفصل. هذا من شأنه أن يوفر لك أكبر قدر من المرونة للمضي قدمًا ، IMHO.

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

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

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

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

بعض الناس يستخدمون KeyValuePair لقيمتين. إنه ليس رائعًا لأنه فقط يصف شيئين Key و Value. ليست وصفية جدا. كما أنه سيستفيد بشكل خطير من إضافة هذا:

public static class KeyValuePair
{
    public static KeyValuePair<K, V> Make(K k, V v) 
    { 
        return new KeyValuePair<K, V>(k, v); 
    }
}

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

للسيناريو الخاص بك ، قد ترغب في تحديد فئة النطاق العام {t} (مع شيكات لصلاحية النطاق).

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

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

إذا 2 ، زوج.

إذا أكثر من 2 فصل.

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

يعتمد ذلك على نوع النتائج ومعنى النتائج ، وكذلك ما إذا كانت الطريقة خاصة أم لا.

للطرق الخاصة ، عادةً ما أستخدم Tuple ، من مكتبة الفصل.

للطرق العامة/المحمية/الداخلية (أي ليس خاصة) ، أستخدم إما المعلمة أو فئة مخصصة.

على سبيل المثال ، إذا كنت أقوم بتطبيق نمط Tryxyz ، حيث لديك طريقة XYZ التي تلقي استثناءً من الفشل وطريقة Tryxyz التي تُرجع منطقية ، فإن Tryxyz ستستخدم معلمة خارج.

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

بخلاف ذلك ، عادة ما أستخدم فئة مخصصة.

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

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