النمذجة القائمة على المسؤولية مقابل الأسباب الطبقية للتغيير

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

  •  05-07-2019
  •  | 
  •  

سؤال

في هذا النص الذي قرأته

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

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

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

المحلول

اقرأ عن نمذجة (أو تصميم) المسؤولية الجماعية والتعاون

http://www.agilemodeling.com/artifacts/crcModel.htm

http://aliستير.cockburn.us/Using+CRC+cards

http://users.csc.calpoly.edu/~jdalbey/SWE/CaseStudies/ATMSim/CRCmodel.html

http://c2.com/doc/oopsla89/paper.html

قد يكون للفئة عدة مسؤوليات.إنه يمثل دائمًا "شيئًا" واحدًا.

لا تنطبق قاعدة "سبب واحد للتغيير" على المسؤوليات.فترة.

يجب استخدام قاعدة "سبب واحد للتغيير" على النحو التالي.

  1. لا يعني "1".وهذا يعني "أقل عدد ممكن".

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

  3. العديد من الأشياء البسيطة أفضل من بعض الأشياء المعقدة.من الأسهل إعادة تجميع الأشياء البسيطة وتعديلها.

  4. في داخل كل شيء معقد أشياء كثيرة بسيطة تحاول أن تكون حرة.

  5. من الصعب تعريف كلمة "بسيط"، لكن "مفهوم واحد" قريب."شيء واحد يجب تغييره" هو أيضًا اختبار مفيد لـ "البساطة".

  6. وأخيرًا، "سبب واحد للتغيير" لا يعني حرفيًا "1".

نصائح أخرى

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

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

ويمكن للمستخدم أيضًا الاقتراب من النظام لقراءة البريد الإلكتروني والرد عليه.إنها مسؤولية النظام أن يجعل هذا ممكنًا أيضًا.

ولكن هل يعني هذا أنه يجب أن يكون هناك مكونان "بدء بريد إلكتروني جديد" و"الرد على البريد الإلكتروني" في النظام؟لا.سيكون مكون "إنشاء البريد الإلكتروني" العام قادرًا على التعامل مع كلا المتطلبين.

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

انظر مرة أخرى عن كثب إلى العبارة التالية التي كتبها كوكبيرن:"من المفترض أن يلتقط المكون فكرة لها غرض في النظام".غرض في النظام (سبب التغيير) ليس مثل الغرض من إرضاء هدف المستخدم (المسؤولية).

لجعل القصة الطويلة قصيرة:كما أفهم، مكون مثالي لديه مفهوم أساسي واحد.قد يكون لديها العديد من المسؤوليات.لكن في نظري لا يجوز إسناد المسؤولية الواحدة إلى أكثر من عنصر واحد.

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