سؤال

بدلا من استخدام واجهة مثل هذا:

public interface IStartable
{
    void Start();
    void Stop();
}

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

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

ما هي إيجابيات وسلبيات استخدام بدء / إيقاف VS باستخدام Ctor / Dispose، خاصة في سياق حاوية IOC / DI؟

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

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

المحلول

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

نصائح أخرى

بشكل عام، يجب أن ينتج المنشئون كائنا مهيئا بشكل صحيح

ولا شيء أكثر!

قد يعتمد ذلك على ما، على وجه التحديد، تقصد أن يحدث عندما تقول بداية (). ولكن بشكل عام، خلط تهيئة الكائن مع التنفيذ الروتيني (وخاصة التنفيذ الوحيد و / أو التنفيذ الطويل!) ينتهك SOC..

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

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