سؤال

لقد قرأت للتو عن مبدأ المسؤولية الفردية ، وفي وقت ما يقول روبرت سي. مارتن أنه من الصعب في بعض الأحيان أن نرى أن الفصل يتحمل أكثر من مسؤولية واحدة.

هل يمكن لأي شخص تقديم مثال على مثل هذا الفصل؟

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

المحلول

النظر في فئة HTTP التي لديها طرق

  • الحصول على (URL url)
  • SendRequest (طلب السلسلة)

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

نصائح أخرى

إنه أمر مضحك ، لأن آخر stackoverflow المستخدم يظهر مثل هذا المثال قبل بضع ساعات في سؤاله.

النظر في هذا الفصل:

[Serializable]
class MyClass
{
  //Serializable fields
  public void Save()
  {
     //Saving data into file
  }

  public void Load()
  {
    //Loading data from file
  }
}

هذا الفصل (myClass) لديه بعض الأدوار المنفصلة:

  1. هذا الفصل قابل للتسلسل

  2. يمكن أن ينقذ هذا الفصل حالته في بعض التخزين

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

يمكنك إنشاء فئات فرعية ، شيء مثل myclasswcfsaver ، ولكن حتى في هذه الحالة ، من الأسهل بكثير استخدام الفئة المتسلسلة MyClass والتسلسل الهرمي المستقل لـ MyClassSavers (مع العديد من النماذج الفرعية المختلفة لـ XML أو Binary أو WCF)

راجع للشغل ، ولهذا السبب في العديد من ORM غالبًا ما نقطع الكيانات من المستودع (انظر نمط المستودع).

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