منظور از تک وظیفه ای یا تغییر کلاس بخاطر یک دلیل چیه؟

پرسیده شده
فعالیت 1091 روز پیش
دیده شده 393 بار
0

سلام وقت بخیر من یک مشکلی با این اصل دارم و خوب درکش نکردم سرچم زیاد کردم ولی باز به اون چیزی که میخواستم نرسیدم ، منظور از اینکه کلاس فقط بخاط یک دلیل تغییر کنه چیه یا اینکه یک وظیفه داشته باشه. چون با توجه به اسم کلاس این وظایف تغییر می کنه مثلا در قسمت tdd یک orm نوشته شد خب با توجه به اینکه خب orm عملیات crud رو انجام میده خب میشه یک وظیفه ولی تنها بخاطر یک دلیل تغییر نمیکنه اگه اسم کلاس عوض شه عملیات ها ممکنه بیشتر شه مثلا یک پیام رسان اگه ما یه کلاس هسته با عنوان پیام رسان داشته باشیم خب (خب تعداد زیادی از عملیات های پیام رسان شامل حذف  و دیلت و نشان دادن پیام و .. )رو شامل میشه ول خب همه اینا میشه یک وظیفه ولی تنها بخاطر یک دلیل تغییر نمیکنه من متوجه نمیشم اینو الان دلیل همون عملیات هایی که داخل یک کلاس انجام میشه؟اگه امکانش هست این و واضح تر توضیح بدید برام ’’

فایل پیوست

امیر
امیر

20 اردیبهشت 00

0
حذف شده

سلام ,

 

 به نظرم در  clean code اصول solid تا حد ممکن باید رعایت بشه , این بدین معنی هست تا جایی که امکان داره , باید رعایت بشن.

 

مسئله اینجاست که هیچ وقت نمی شه چیزی رو کامل ویا بدون نقض درست کرد..  اصل SRP  میگه که هر قسمت از  یک برنامه مسولیت به خصوصی داشته باشه; تا زمانی که مشکلی در برنامه رخ داد بدونیم که از کدوم قسمت از برنامه وظیفه خودش رو انجام نداده.

و یا اگر تونستیم یک بخشی از برنامه رو توسعه بدیم که بتونه سریع تر و کم هزینه تر کار خودشو انجام بده .. فقط تمرکزمون بر اون قسمت از برنامه باشه ..  تا هم وظیفشو برای اجزای مختلف برنامه انجام بده و هم اینکه در قسمت های مختلف برنامه اختلال بوجود نیاره.

 

امیدوارم براتون ملموس بوده باشه.

 

فایل پیوست

Faraz salehi

توسط

Faraz salehi

20 اردیبهشت 00

1
حذف شده

سلام و احترام

 

متدهایی که توی یه کلاس وجود دارند باید مربوط باشه به وظیفه اون کلاس، برای مثال تو همین orm همه متدها دارن کوئری میزنن و وظیفه ها کاملا مشخصه و یهو مثلا کسی نمیاد کاربر register کنه. پس تا الان مشخص شد که کلاس ما وظیفش همینه حالا شما بخواید بیاید متدی رو اضافه کنید میرید داخل همون کلاس و یه متدی رو اضافه میکنید

 

اما وقتی میگیم فقط یک دلیل داره که تغییر کنه ینی اینکه شما اگه بخواید یه چیزی که مربوط به وظیفه اون کلاس میشه رو تغییر بدید فقط و فقط باید یه چیزی که به اون کلاس ربط با وظیفش داره رو باید تغییر بدید و نباید در غیر این صورت این کلاس رو تغییر بدید

این به این منعنیه این کلاس فقط و فقط باید یه وظیفه داشته باشه همین، هر کسی از این کلاس یه چیزی رو میخواد این کلاس باید یه چیز مشخص رو به شما بر گردونه 

قصد اینکه پیچیدگی این کلاس بیاد پایین

 

 

 

https://www.armakuni.com/ak-thinking/2020/2/10/the-single-responsibility-principle-srp-software-engineering-topic-of-the-daynbsp2#:~:text=The%20Single%20Responsibility%20Principle%20states,has%20one%20reason%20to%20change.

فایل پیوست

امیر صالحی

توسط

امیر صالحی

20 اردیبهشت 00

حذف شده
آها بله درسته ممنون، پس یعنی وظیفه کلاس با توجه به نام گذاری ما مشخص میشه ؟ یا انتظاری که از کلاسمون داریم تعیین میشه.؟
امیر

20 اردیبهشت 00

حذف شده
خواهش میکنم، ما اصلا یه وظیفه براش مشخص میکنیم و واسه اون وظیفه یه اسم میزاریم، میخوای با دیتابیس کار کنی orm، میخوای کاربر ثبت نام کنی register میخوای خروجی pdf بگیری PDFExporter و...
امیر صالحی

21 اردیبهشت 00