Philocode
#books
The problem with arrays is that their shape is undefined. Clients wouldn’t know how they can extract from it the information they need.
ادیت: این دو جملۀ نوباک رو با گوشت و خون حس کردم! وقتی شما از روی یه کلاس آبجکت بسازی، دقیقاً مشخصه که داخلش چه پراپرتیهایی داری، ولی ساختار آرایه مشخص نیست و هرچی فکرش رو کرده باشید یا نکرده باشید رو میشه داخلش گذاشت. البته توی Typenoscript میشه تایپهای محدودتری ساخت، ولی در نهایت آرایه ساختارش نامشخصه.
#MathiasNoback
ادیت: این دو جملۀ نوباک رو با گوشت و خون حس کردم! وقتی شما از روی یه کلاس آبجکت بسازی، دقیقاً مشخصه که داخلش چه پراپرتیهایی داری، ولی ساختار آرایه مشخص نیست و هرچی فکرش رو کرده باشید یا نکرده باشید رو میشه داخلش گذاشت. البته توی Typenoscript میشه تایپهای محدودتری ساخت، ولی در نهایت آرایه ساختارش نامشخصه.
#MathiasNoback
👍4
طراحیهای هزینهبر و غیر مؤثر از سه منبع ناشی میشوند:
■ یک راه حل پیچیده برای یک مشکل ساده
■ یک راه حل ساده ولی نادرست برای یک مشکل پیچیده
■ یک راه حل نامناسب و پیچیده برای یک مشکل پیچیده
#code_complete
■ یک راه حل پیچیده برای یک مشکل ساده
■ یک راه حل ساده ولی نادرست برای یک مشکل پیچیده
■ یک راه حل نامناسب و پیچیده برای یک مشکل پیچیده
#code_complete
🔥3
Philocode
طراحیهای هزینهبر و غیر مؤثر از سه منبع ناشی میشوند: ■ یک راه حل پیچیده برای یک مشکل ساده ■ یک راه حل ساده ولی نادرست برای یک مشکل پیچیده ■ یک راه حل نامناسب و پیچیده برای یک مشکل پیچیده #code_complete
در همین راستا:
قرار بود که یه سری دیتا رو از یه منبع دیگه وارد سیستم خودمون کنیم. مشکل این بود که اون یکی سرویس، webhook نداشت. حالا این یعنی چی؟ یعنی وقتی دیتای جدیدی اونجا ایجاد میشد، نمیتونستیم خبردار بشیم. راهحل ما این شد که در بازههای زمانی به اون سرویس ریکوست بزنیم، دیتا رو بگیریم و حالا یه چالش این بود که چهطور دیتای جدید رو از دیتای قدیمی تشخیص بدیم؟
اولین راهحل که به ذهنم رسید، این بود که آیدی آخرین موردی که توی دیتابیس خودمه و از اون سرویس اومده رو بیارم، بعد یه foreach بزنم روی ریسپانس و یکی یکی برم تا ته، هر وقت آیدی مطابقت داشت، متوقف بشه و از بعد اون صرف نظر کنم.
راهحل رفت روی پروداکشن و یه شکست مذبوحانه داشت. بعد از فیکسکردنش، این راهحل به ذهنم رسید:
به جای آیدی آخرین مورد، آیدیهای اخیر رو از دیتابیس گرفتم، بعد ریسپانس رو filter کردم! منطق شلوغی که پیاده شده بود، با چند خط ساده انجام شد.
راهحل اول، یه مثال خوب برای راهحل نامناسب و پیچیدهای بود که برای یه مشکل ساده در نظر گرفتیم!
قرار بود که یه سری دیتا رو از یه منبع دیگه وارد سیستم خودمون کنیم. مشکل این بود که اون یکی سرویس، webhook نداشت. حالا این یعنی چی؟ یعنی وقتی دیتای جدیدی اونجا ایجاد میشد، نمیتونستیم خبردار بشیم. راهحل ما این شد که در بازههای زمانی به اون سرویس ریکوست بزنیم، دیتا رو بگیریم و حالا یه چالش این بود که چهطور دیتای جدید رو از دیتای قدیمی تشخیص بدیم؟
اولین راهحل که به ذهنم رسید، این بود که آیدی آخرین موردی که توی دیتابیس خودمه و از اون سرویس اومده رو بیارم، بعد یه foreach بزنم روی ریسپانس و یکی یکی برم تا ته، هر وقت آیدی مطابقت داشت، متوقف بشه و از بعد اون صرف نظر کنم.
راهحل رفت روی پروداکشن و یه شکست مذبوحانه داشت. بعد از فیکسکردنش، این راهحل به ذهنم رسید:
به جای آیدی آخرین مورد، آیدیهای اخیر رو از دیتابیس گرفتم، بعد ریسپانس رو filter کردم! منطق شلوغی که پیاده شده بود، با چند خط ساده انجام شد.
راهحل اول، یه مثال خوب برای راهحل نامناسب و پیچیدهای بود که برای یه مشکل ساده در نظر گرفتیم!
👍3
آقای Michael Feathers میگه: از نظر من، Legacy Code یعنی کدی که تست نداشته باشه.
👍2😁1
Philocode
آقای Michael Feathers میگه: از نظر من، Legacy Code یعنی کدی که تست نداشته باشه.
جناب Robert Martin از اون طرف میگه: میدونم مسخره به نظر میاد، ولی قابل ملاحظهست که اگه کدهای پروداکشن شما یه جوری حذف بشه و فقط تستهاش بمونه، میتونید کل سیستم با کمی تلاش بازنویسی کنید!
بعد Noback توی کتاب Advanced Web Application Architecture که قبلاً معرفی کرده بودم، برعکسش رو میگه: اما اگه فقط کدهای پروداکشن رو داشته باشید، اینکه براش تست بنویسید خیلی سخته!
بعد Noback توی کتاب Advanced Web Application Architecture که قبلاً معرفی کرده بودم، برعکسش رو میگه: اما اگه فقط کدهای پروداکشن رو داشته باشید، اینکه براش تست بنویسید خیلی سخته!
👍3
It makes sense for PHP to have a weak type system. Being a language that mainly works with a HTTP request, everything is basically a string.
#BrentRoose
#BrentRoose
🔥2👍1
This pattern of wrapping unstructured data in types, so that we can use that data in a reliable way, is called “data transfer objects”. It's the first concrete pattern I highly recommend you to use in your larger-than-average Laravel projects.
#BrentRoose
#BrentRoose
👍2
انتخاب اسمهای طولانی در صورت ضرورت، ایرادی نداره و اجتنابناپذیره. Brent Roose میگه ما توی یکی از پروژههامون یه همچین کلاسی داریم:
میگه: ما اولش از این اسم متنفر بودیم و تلاش کردیم کوتاهش کنیم، اما در نهایت باید اعتراف میکردیم که وضوح این اسم نسبت به کاری که کلاس انجام میده، مهمترین چیزه و IDEهامون مراقب هستند که وقتی اسم این کلاسهای طولانی رو مینویسیم، اشتباه ننویسیم. پس طولانیبودنشون خطری نداره.
CreateOrUpdateHabitantContractUnitPackageAction 😁میگه: ما اولش از این اسم متنفر بودیم و تلاش کردیم کوتاهش کنیم، اما در نهایت باید اعتراف میکردیم که وضوح این اسم نسبت به کاری که کلاس انجام میده، مهمترین چیزه و IDEهامون مراقب هستند که وقتی اسم این کلاسهای طولانی رو مینویسیم، اشتباه ننویسیم. پس طولانیبودنشون خطری نداره.
👍4🔥1
Before:
ادیت: کد اول، جدا از پیچیدگی و کثیفبودن، در صورتی که کاراکتر | داخل رشته نباشه، ارور میده (توی بخش دوم)، اما کد دوم در هر صورت درست کار میکنه.
{{ explode('|', $gift->noscript)[0] }} - {{ explode('|', $gift->noscript)[1] }}
After:{{ str_replace('|', ' - ', $gift->noscript) }}
آدم تحت فشار کدهای مزخرفی مینویسه. 😂ادیت: کد اول، جدا از پیچیدگی و کثیفبودن، در صورتی که کاراکتر | داخل رشته نباشه، ارور میده (توی بخش دوم)، اما کد دوم در هر صورت درست کار میکنه.
😁3👍2
این وبسایت یه مجموعه از cheatsheetهای زبانهای برنامهنویسی و حتی ابزارها و لایبرریهای مختلف رو جمع کرده:
https://devhints.io
https://devhints.io
Devhints.io cheatsheets
https://assets.devhints.io/previews/index.jpg
A ridiculous collection of web development cheatsheets
👍2🔥1