سؤال

ولدي الطبقة التي تحدد نوع CALLRATE. أنا بحاجة إلى إضافة القدرة على إنشاء مثيلات متعددة من صفي من خلال قراءة البيانات من ملف.

وأضفت طريقة ثابتة لبلدي CALLRATE الفئة التي ترجع List<CallRate>. هل هو موافق لفئة لتوليد حالات جديدة من نفسه عن طريق استدعاء أحد المنشئات الخاصة بها؟ كان يعمل، أنا فقط أتساءل عما إذا كان هذا هو الشيء الصحيح للقيام به.

List<CallRates> cr = CallRates.ProcessCallsFile(file);
هل كانت مفيدة؟

المحلول

وانها على ما يرام تماما للحصول على وجوه (ق) من تلقاء نفسها من أسلوب ثابت.

ومنها مثلا.

واحد من صافي المكتبات نقطة يفعل الشيء نفسه كما فعلتم،

XmlReadrer reader = XmlReader.Create(filepathString);

نصائح أخرى

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

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

ويبدو غرامة بالنسبة لي. في اللغات الأخرى التي من المحتمل أن كتابة دالة، ولكن بلغة مثل C #، أساليب ثابتة يستغرق هذا الدور.

وأنها على ما يرام. ما الذي قمت بإنشائه هو شيء من هذا القبيل وسيلة مصنع بسيط. لديك أسلوب ثابت أن يخلق مثيل صالح من نوع. في الواقع طريقة الخاص بك لا بل يجب أن تكون ثابتة ولا يزال لديك رمز صالح. هناك نمط تصميم (النموذج) الذي يخلق كائن صالح جديد من كائن موجود. راجع التفاصيل في http://www.dofactory.com/Patterns/PatternPrototype.aspx .

وبالتأكيد، للتحليل بسيط (أو ما شابه) سيناريوهات - أنا فعلا <م> تفضل في تكون وسيلة مصنع جزء من الطبقة. نعم - فإنه كسر SRP ، لكنه يحقق <وأ href = "HTTP: // EN .wikipedia.org / ويكي / KISS_principle "يختلط =" نوفولو noreferrer "> KISS - حتى أسميها الفوز صافي. لتطبيقات أكبر، أو إجراءات التوزيع أكثر تعقيدا - إنه من المنطقي أن يكون ذلك تعتبر فئة مصنع الخارجية

.

لحالة معينة، ربما كنت تفضل الأسلوب الذي اتخذ في IEnumerable <سلسلة> بدلا من اسم الملف - أن كنت لا تزال تعطيك منطق التحليل، ولكن تسمح وحدة الاختبارات سهلة و"إعادة الاستخدام". المتصل يمكن أن يلتف الملف إلى IEnumerable بسهولة بما فيه الكفاية.

وسائل مصنع وغالبا ما تكون التصميم الجيد. عندما أكتب لهم في C #، وأدعو لهم "الجديد"، لذلك ما يلي:

new MyClass()

ويصبح

MyClass.New()

ومسلي انها تنفذ مثل هذا:

class MyClass
{
    public static MyClass New()
    {
        return new MyClass();
    }
}

وغالبا أفعل هذا عندما تكون هناك شروط إضافية حول ما إذا كان فعلا إنشاء فئة أو مجرد العودة null، أو ما إذا كان للعودة MyClass أو شيء المستمدة منها.

وأنا في بعض الأحيان استخدام أساليب ثابتة العامة كبديل عن الحمولة الزائدة المنشئ.

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

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

وPaul: لا تنسى أن القراد التعليق أعلاه، والتي تجد هي أفضل إجابة

.

وفقط أود أن أشير "توليد حالات جديدة من نفسه عن طريق استدعاء أحد المنشئات الخاصة"

وانها ليست من المنشئ، هو من أسلوب ثابت.

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

    public class Car
    {
        public static Car RedExpensiveCar = new Car("Red", 250000);

        public Car()
        {

        }

        public Car(string color, int price)
        {
            Color = color;
            Price = price;
        }

        public string Color { get; set; }
        public int Price { get; set; }
    }

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

Car car = Car.RedExpensiveCar;

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

وهذا مفيد جدا في الحالات التي يكون فيها "البناء" قد لا دوما بإرجاع مثيل جديد. على سبيل المثال، قد ترغب في إرجاع كائن مؤقتا سابقا بدلا من ذلك.

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