هل استبدال حاوية اللجنة الاولمبية الدولية استخدام المصانع

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

سؤال

وأنا بدأت للتو مع حاويات اللجنة الاولمبية الدولية حتى الاعتذار إذا كان هذا هو السؤال غبي.

ولدي كود مثل التالية في التطبيق

internal static class StaticDataHandlerFactory
    {
        public static IStaticDataHandler CreateHandler(StaticDataUpdate staticDataUpdate)
        {
            if (staticDataUpdate.Item is StaticDataUpdateOffice)
            {
                return new OfficeUpdateHandler();
            }

            if (staticDataUpdate.Item is StaticDataUpdateEmployee)
            {
                return new EmployeeUpdateHandler();   
            }

            if (staticDataUpdate.Item == null)
            {
                throw new NotImplementedException(
                    string.Format("No static data provided"));
            }
            else
            {
                throw new NotImplementedException(
                    string.Format("Unimplemented static data type of {0}", staticDataUpdate.Item.GetType().FullName));
            }
        }
    }

وانها اساسا مصنع بسيط هو أن يعود الاستراتيجية الصحيحة للتعامل مع البيانات المدخلة.

هل حاوية اللجنة الاولمبية الدولية تسمح لي للقضاء على كود مثل هذا؟ وهذا يعني: أنه لن يسمح لي لاختيار التنفيذ الملموس حيوي لتحميل على أساس نوع معلمة إدخال

وأو أنا بعيدا بالطبع هنا؟

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

المحلول

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

وبوصفها جانبا، يظهر رمز لانتهاكها في قانون ديميتر . ويبدو أن المعلمة يجب أن تكون من نوع "StaticDataUpdateItem" بدلا من "StaticDataUpdate". مع تلك التي لوحظت، وهناك حجة قوية جدا لإعادة كتابة هذه التعليمات البرمجية كما استدعاء أسلوب على StaticDataUpdateItem.

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

نصائح أخرى

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

والطريقة أود أن هيكلة الأكثر شيوعا هذا النوع من الاشياء هي تحويل الطبقة مصنع بك في حاوية اللجنة الاولمبية الدولية، ببساطة عن طريق السماح للUpdateHandlers التي يتم إرجاعها إلى تحديد باستخدام التبعية حقن. وذلك بدلا من وجود منطق في التعليمات البرمجية التي تحدد أن StaticDataUpdateOffice يعني للعودة OfficeUpdateHandler، يمكنك تشغيل التعليمات البرمجية إلى القول ببساطة أن StaticDataUpdateOffice يعود مهما يحتوي على (المحددة حديثا) m_officeUpdateHandler متغير. طالما الإطار الخاص بالتأكد من أن قمت بتعيين قيمة m_officeUpdateHandler قبل استدعاء المصنع الخاص بك، وكنت على ما يرام. ويمكنك تغيير قيمة m_officeUpdateHandler إلى أي شيء تريده في وقت التشغيل مع تغير احتياجاتك.

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

ملحوظة: يتم جميلة مدفوعة تجربتي مع هذا النوع من الاشياء بقوة بلدي (إيجابية للغاية) تجربة مع الربيع، وهكذا يمكن أن لون تفسيري لسؤالك (والجواب)

والجواب القصير هو نعم، فإنه يسمح بذلك. هذا يظهر بلوق وظيفة طريقة بقعة لاختيار التنفيذ في وقت التشغيل باستخدام وندسور. المؤلف، Ayende، يفصل هنا و <ل أ href = "http://ayende.com/Blog/archive/2008/10/05/windsor-imodelinterceptersselector.aspx" يختلط = "نوفولو noreferrer"> هنا .

ولم أحاول هذا حتى الآن، ولكن أتوقع أن قريبا.

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

public static IStaticDataHandler CreateHandler<T>( params object[] args )
{...

وسائط حيث يمكن أن تنتقل في مثل الحجج المنشئ (، على سبيل المثال، المنشط).

وأنا لم أقرأ أي الكلمات هنا أن له معنى كبير.

واللجنة الاولمبية الدولية هو أكثر لالتكوين؟

وإنشاء الكائن الحيوي هو أفضل ما؟ الوراثة؟ هذا هو كل الموضوع خارج.

1) اللجنة الاولمبية الدولية ليست سوى وقتا لطيفا التوقف مقابل تنفيذ "تكوين على التخصص / الميراث" الإنجيل.

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

وقال وسيلة أخرى، وهذا هو نمط stratey كبديل على نمط القالب لنفس الأسباب (تغليف ...) ... ولكن هو المزيد من العمل لتهيئة جميع واجهة / أنواع إضافية مجردة وأنها أكثر العمل على القيام بذلك في كل مرة مع كل IServiceProvicerThis وIResolverThat ... إذا لم تكن تعبت من الحاجة إلى تحقيق مضجر عقود رمز مثل:

وIInterestingService اهتمام = ... تحصل مثيل ولكن ...

وإضافة حوالي ثلاثة خطوط أكثر من هذا القبيل ..

ثم

وIAmazementService خدمة = AmazementService الجديدة (مثيرة للاهتمام، thesecondstrategy، thethird، الخ ...)

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

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

ودامون

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