هر سخن وقتی و هر نکته مکانی دارد!
شرح ماجرا:
در خط تولید کارخانه ای، با شروع ساعت کار، تعدادی ربات مشغول کار میشوند. تعدادی کارگر در ساعاتی مشخص به این ربات ها رسیدگی میکنند، آنها را شارژ و روغن کاری میکنند و ربات ها به ادامه ی کار خود میپردازند.. کارگر ها در ساعت استراحت چای و ناهار صرف میکنند و بعد دوباره شروع به کار میکنند. در پایان ساعت کاری کارگرها به منزل میزوند و ربات ها نیز خاموش میشوند.
صورت مسئله:
برای نیروهای کار خط تولید این کارخانه Interface مناسب چی میتونه باشه؟
جواب؟
اصل ISP به ما میگه: استفاده از چند Interface کوچک بهتر از استفاده از یک Interface کلی هست. چرا؟ چون ممکنه کلاس های خودمون رو وادار کنیم چیزی رو پیاده سازی کنن که بهش نیاز ندارن. کوچک کردن Interface ها این مزیت رو داره که وظایف کاملا مشخص هستن و نهایتا در صورت نیاز میتونین از چند Interface ارث بری کنید.
پس برای جواب به سوالمون اگر موجودیت ها رو کارگر، ربات، انسان فرض کنیم، آیاد درسته که انسان نیاز به کنترل روغن و شارژ داشته باشه و ربات به چای و ناهار؟!
interface IWorker{ Signin(); StartWork(); Continue(); Signout(); } interface IHuman{ TeaBreak(); Launch(); } interface IRobot{ OilCheck(); ReCharge(); }
نکته1: قیمه ها رو نریزین توی ماستا!
نکته2: درسته که حافظ عزیز فرمودن "هر سخن وقتی و هر نکته مکانی دارد" اما در بیت بعدی فرمودن "مرغ زیرک نزند در چمنش پرده سرای، هر بهاری که به دنباله خزانی دارد". پس از Interface ها در جای مناسب و به اندازه استفاده کنید و با زیاده روی در اونها کد رو پیچیده و "سخت خوان" نکنیم.
رهنمود1: در نویسندگی توصیه میشه چیزی رو که مینویسین بارها و بارها مطالعش کنین. به چندین جهت. از جمله اینکه غلط املا و انشایی نداشته باشه، بعلاوه ی اینکه ببینین به دل خودتون میشینه یا نه، و همونی که میخواستین و یا نزدیک به چیزی که میخواستین بوده یا خیر. کدنویسی هم از این قائده مستثنی نیست. کدی رو که مینوسید بارها و بارها بخونین. همیشه جا برای بهتر نوشتن هست، ولی در عین حال مراقب وسواس هم باشید.