اینجا قراره در مورد چیز هایی حرف بزنیم که یه برنامه نویس درست و حسابی باید بدونه (پیش فرضمون اینه سینتکس و روش های معمول رو همه جا میشه پیدا کرد) و گاهی هم چیز های با حال بسازیم یا معرفی کنیم
هر کسی را بهر کاری ساختند!
توضیح کوتاهی درمورد single responsibility principle
اگر با دنیای مهندسی نرمافزار آشنا هستید احتمالا اسم اصول SOLID به گوشتون آشناست. SOLID مخفف پنج قانون پایهی مهندسی نرمافزار در پارادایم Object-Oriented است. که رعایت اونها کد شما رو توسعه پذیرتر و خوانا تر میکنه. در این مطلب توضیح کوتاهی در مورد S یا همون Single Responsibility Principle میدهم و امیدوارم مورد توجهتون قرار بگیره.
چرا باید از هر کسی تو حوزه تخصصی خودش استفاده کنیم؟
وقتی کسی رو برای یک حوزه تخصصی مشخص استخدام میکنیم و برای کار دیگه ای از او استفاده میکنیم دو اتفاق مهم می افته. اول این که اون فرد به احتمال زیاد دیگه نمیتونه اون کار تخصصی خودش رو به خوبی انجام بده. چون مشغول کار دیگه ای شده که در اون کار تخصص نداره و مجبوره زمان و هزینه خرج کنه تا اون کار رو یاد بگیره و انجام بده. دوم این که چون توی کار غیر تخصصی هم دانش کافی نداره احتمالا اون کار رو هم نمیتونه به خوبی انجام بده. حالا ما اینجا دو تا کار داریم که هر دو دارن به شیوه غلطی انجام میشن به جای این که یک کار به شیوهی درستی انجام بشه.
کلاس ها متخصص میشوند!
نکته جالب اینجاست که چیزی که بالا گفتم محدود به آدم ها نمیشه و کلاس ها هم متخصص میشن. وقتی ما کلاسی رو برای انجام یک کار مشخص و به خصوص مینویسیم اون کار تبدیل میشه به تخصص اون کلاس. حالا اگر بعد از گذشتن یه مدت زمان بخوایم کدی بنویسیم که کاری متفاوت ولی تا حدودی شبیه به کار این کلاس رو انجام میده دو تا انتخاب داریم. اول این که بزاریم این کلاس که از قبل وجود داشته به کار تخصصی خودش ادامه بده و یک کلاس دیگه برای کار جدید ایجاد کنیم. دوم این که کلاسی که از قبل وجود داشته رو طوری تغییر بدیم که هر دو کار رو با هم انجام بده. اگه روش دوم رو انتخاب کنیم احتمال خراب شدن کار تخصصی کلاس ما وجود داره و حتی شاید کار جدید رو هم به خوبی انجام نده. پس بهتره برای کار های جدید کلاس های جدید بسازیم.
کلاس ها رو با سواد کنیم!
در زمان نوشتن یک کلاس حتما دقت داشته باشید که کلاس شما یک کار بیشتر انجام نده. یک مسولیت بیشتر نداشته باشه و توی یک کار خاص متخصص باشه. این باعث میشه اون کلاس این کار خاص رو به بهترین شکل انجام بده. چون یک کار، یک مسولیت و یک هدف بیشتر نداشته باشه.
یک مثال کوتاه
ما در حال ساختن یک فروشگاه اینترنتی لوازم خانگی هستیم. یکی از نیاز هایی که وجود داره اینه که کلاس یا متدی بوجود بیاد که قیمت تمام شدهی محصول بعد از اعمال تخفیف و کوپن رو به خریدار نمایش بده. ما یک کلاس میسازیم که هدفش برگردوندن قیمت نهایی محصول به خریداره. بعد از یک مدت و در مسیر توسعه یک داشبورد برای فروشنده طراحی میکنیم و میخوایم قیمت کالا به اون هم نمایش داده بشه. برای این که این نیاز رو برطرف کنیم از همون کلاسی که قیمت رو به خریدار نمایش میده استفاده میکنیم. بعد از مدتی فروشنده ها شاکی میشن! اونا نمیخوان قیمت تمام شده محصول بعد از تخفیف و اعمال کوپن رو ببینن. قیمت اصلی کالا براشون مهمه. حالا چیکار باید بکنیم. برای این که نیاز فروشنده ها برطرف بشه باید کلاس رو تغییر بدیم و اگر کلاس رو تغییر بدیم دیگه قیمت تمام شده به درستی به خریدار ها نمایش داده نمیشه. با این که به ظاهر این دوتا کار شبیه هم بودن ولی چون مسولیت های متفاوتی داشتن و در دو حوزه متفاوت تعریف شده بودن باید دو کلاس تخصصی برای اونها تعریف میشد.
خوشحال میشم نظرتون رو راجع به این مطلب و مطالب گذشته بدونم و نقص های موجود در متنم رو با نظر شما اصلاح کنم.
مطلبی دیگر از این انتشارات
به دنبال تخم مرغ عید پاک در زبان برنامه نویسی پایتون
مطلبی دیگر از این انتشارات
بتمن ،اندروید ،گوگل و دیگران
مطلبی دیگر از این انتشارات
مفهوم Trait در زبان برنامه نویسی PHP