یه مثال خوب برای اینکه چرا نباید از کدی که هوشمصنوعی میده توی پروداکشن استفاده کنید . این کد PHP رو یکی از دوستان فرستاده بود که بررسی کنم مشکلی نداشته باشه و میتونید خودتون مقایسه کنید تغییراتی که کرده. شاید تست کنید کار کنه ولی ممکن بود دچار خطا بشه در آینده در شرایط خاص
@DevTwitter | <Mahdi Akrami/>
@DevTwitter | <Mahdi Akrami/>
👍41👎10🤣10❤4
آیا میدانستید PeachPie
کد PHP را کامپایل میکنه روی .NET runtime اجرا میکنه
چه شود
https://peachpie.io
https://github.com/peachpiecompiler/peachpie
چرا یکی باید بخواد بین .net و php پل بزنه ؟
@DevTwitter | <MehrdadLinux/>
کد PHP را کامپایل میکنه روی .NET runtime اجرا میکنه
چه شود
https://peachpie.io
https://github.com/peachpiecompiler/peachpie
چرا یکی باید بخواد بین .net و php پل بزنه ؟
@DevTwitter | <MehrdadLinux/>
🤣50👍4👎4
یک پروژه توی گیت هاب پوش کردم الان، برای Data Analyst
اگر دارید یاد میگیرید، یا میخواید تمرین کنید و نگاهی به کد بندازید، این ریپازیتوری رو بهتون پیشنهاد میکنم، به صورت خط به خط توضیح دادم و از خروجی کار هم عکس آپلود کردم
اگر هم قابل بود، Star کنید
https://github.com/MisaghMomeniB/Tehran-Weather-Analysis
@DevTwitter | <Misagh Momeni Bashusqeh/>
اگر دارید یاد میگیرید، یا میخواید تمرین کنید و نگاهی به کد بندازید، این ریپازیتوری رو بهتون پیشنهاد میکنم، به صورت خط به خط توضیح دادم و از خروجی کار هم عکس آپلود کردم
اگر هم قابل بود، Star کنید
https://github.com/MisaghMomeniB/Tehran-Weather-Analysis
@DevTwitter | <Misagh Momeni Bashusqeh/>
1👍26🔥4❤3
اشتراکگذاری دادهها در میکروسرویسها: تعادل بین Consistency و Scalability
سالها پیش وقتی شروع به کار با میکروسرویسها کردم، قانون «هر سرویس نباید دیتابیس خودش رو با سرویس دیگه به اشتراک بذاره» رو خیلی جدی گرفتم. این قانون منطقی به نظر میومد. سرویسها باید مالک دادههاشون باشن و بتونن بدون مشکل تغییرات خودشونو اعمال کنن. اما نکتهای که من اول متوجه نشدم این بود که تفاوتی بزرگ بین Sharing a data source (دیتابیس مرکزی) و Sharing data وجود داره.
در دنیای میکروسرویسها، دادهها مثل یک زنجیره برای ارتباط بین سرویسها عمل میکنن. مثلا سرویس Trips نیاز به اطلاعات مسافران از سرویس Passenger یا اطلاعات رانندگان از سرویس Driver داره. خیلی منطقی به نظر میاد که این دادهها رو به صورت Synchronous درخواست کنیم، اما این روش در مقیاسهای بزرگ چالشهایی رو به همراه داره.
چرا درخواستهای Synchronous برای دادهها نمیتونند به خوبی مقیاسپذیر باشند؟
درخواستهای همزمان و دریافت دادههای بهروز اول به نظر منطقی میاد. در نهایت همه ما میخواهیم دادههای جدید و دقیق داشته باشیم، درست؟ اما وقتی این روال رو برای مدت طولانی ادامه میدیم، مشکلاتی پیش میاد:
- زنجیرههای وابستگی: وقتی هر سرویس برای دریافت دادههاش به سرویس دیگهای وابسته باشه، در طول زمان تبدیل به یک شبکه پیچیده میشه. مثلا سرویس Leaderboard نیاز به اطلاعات User Service برای نمایش نام و آواتار کاربران داره، و این باعث میشه که یک زنجیره از درخواستها به وجود بیاد.
- نقطههای شکست یا SPOF: وقتی سرویسهای زیادی به یک سرویس مشترک مثل User Service وابسته هستند، اون سرویس تبدیل به یک گلوگاه میشه. اگه این سرویس خراب بشه، میتونه کل سیستم رو تحت تاثیر قرار بده.
- تاخیر در پردازش: هر درخواست اضافی در زنجیره باعث افزایش تاخیر میشه.
با این شرایط، باید این سوال رو بپرسیم: آیا همیشه به دادههای آپدیت نیاز داریم؟
کار با Eventual Consistency: یک راهحل مقیاسپذیر
به جای اینکه هر سرویس برای دادههای خودش درخواستهای همزمان ارسال کنه، میشه هر سرویس کپی محلی از دادههای مورد نیاز خودش رو نگهداری کنه و اونها رو از طریق Event ها یا Caching آپدیت کنه. این رویکرد ممکنه باعث بشه دادهها در نهایت سازگار یا Consistent باشن، یعنی دادهها ممکنه کمی دیر بهروزرسانی بشن، ولی هیچوقت قدیمی و از تاریخ گذشته نمیمونن. این روش معمولاً بهترین انتخاب هست. چرا؟
- مقیاسپذیری: سرویسها میتونن دادههایی رو که نیاز دارن به طور محلی ذخیره کنن و دیگه نیازی به درخواست همزمان به سرویسهای دیگه نیست.
- کاهش SPOF: دادههای محلی به این معنی هستند که سرویسها میتونن مستقل عمل کنن و وابستگی به سرویسهای دیگه رو کاهش بدن.
- عملکرد بهتر: چون هر سرویس دسترسی سریع به دادههای ضروری خودش داره، دیگه نیازی به درخواستهای همزمان نیست که باعث افزایش تاخیر بشه.
سازگاری دادهها در عمل
سرویسها به دادههای مختلف نیاز دارند و هر کدوم سازگاری یا Consistency متفاوتی میطلبند:
- سرویس Leaderboard: نیاز به دادههای کاربری داره، ولی ممکنه آواتارها و نامهای نمایشی کمی قدیمی هم مشکلی ایجاد نکنه. این سرویس میتونه یک کپی محلی از دادههای کاربران داشته باشه.
- سرویس Notification: این سرویس نیاز به ایمیلهای بهروز داره تا به درستی به کاربران پیام ارسال کنه. اینجا شاید نیاز به همگامسازی دقیقتری باشه.
@DevTwitter | <Massimo Dev/>
سالها پیش وقتی شروع به کار با میکروسرویسها کردم، قانون «هر سرویس نباید دیتابیس خودش رو با سرویس دیگه به اشتراک بذاره» رو خیلی جدی گرفتم. این قانون منطقی به نظر میومد. سرویسها باید مالک دادههاشون باشن و بتونن بدون مشکل تغییرات خودشونو اعمال کنن. اما نکتهای که من اول متوجه نشدم این بود که تفاوتی بزرگ بین Sharing a data source (دیتابیس مرکزی) و Sharing data وجود داره.
در دنیای میکروسرویسها، دادهها مثل یک زنجیره برای ارتباط بین سرویسها عمل میکنن. مثلا سرویس Trips نیاز به اطلاعات مسافران از سرویس Passenger یا اطلاعات رانندگان از سرویس Driver داره. خیلی منطقی به نظر میاد که این دادهها رو به صورت Synchronous درخواست کنیم، اما این روش در مقیاسهای بزرگ چالشهایی رو به همراه داره.
چرا درخواستهای Synchronous برای دادهها نمیتونند به خوبی مقیاسپذیر باشند؟
درخواستهای همزمان و دریافت دادههای بهروز اول به نظر منطقی میاد. در نهایت همه ما میخواهیم دادههای جدید و دقیق داشته باشیم، درست؟ اما وقتی این روال رو برای مدت طولانی ادامه میدیم، مشکلاتی پیش میاد:
- زنجیرههای وابستگی: وقتی هر سرویس برای دریافت دادههاش به سرویس دیگهای وابسته باشه، در طول زمان تبدیل به یک شبکه پیچیده میشه. مثلا سرویس Leaderboard نیاز به اطلاعات User Service برای نمایش نام و آواتار کاربران داره، و این باعث میشه که یک زنجیره از درخواستها به وجود بیاد.
- نقطههای شکست یا SPOF: وقتی سرویسهای زیادی به یک سرویس مشترک مثل User Service وابسته هستند، اون سرویس تبدیل به یک گلوگاه میشه. اگه این سرویس خراب بشه، میتونه کل سیستم رو تحت تاثیر قرار بده.
- تاخیر در پردازش: هر درخواست اضافی در زنجیره باعث افزایش تاخیر میشه.
با این شرایط، باید این سوال رو بپرسیم: آیا همیشه به دادههای آپدیت نیاز داریم؟
کار با Eventual Consistency: یک راهحل مقیاسپذیر
به جای اینکه هر سرویس برای دادههای خودش درخواستهای همزمان ارسال کنه، میشه هر سرویس کپی محلی از دادههای مورد نیاز خودش رو نگهداری کنه و اونها رو از طریق Event ها یا Caching آپدیت کنه. این رویکرد ممکنه باعث بشه دادهها در نهایت سازگار یا Consistent باشن، یعنی دادهها ممکنه کمی دیر بهروزرسانی بشن، ولی هیچوقت قدیمی و از تاریخ گذشته نمیمونن. این روش معمولاً بهترین انتخاب هست. چرا؟
- مقیاسپذیری: سرویسها میتونن دادههایی رو که نیاز دارن به طور محلی ذخیره کنن و دیگه نیازی به درخواست همزمان به سرویسهای دیگه نیست.
- کاهش SPOF: دادههای محلی به این معنی هستند که سرویسها میتونن مستقل عمل کنن و وابستگی به سرویسهای دیگه رو کاهش بدن.
- عملکرد بهتر: چون هر سرویس دسترسی سریع به دادههای ضروری خودش داره، دیگه نیازی به درخواستهای همزمان نیست که باعث افزایش تاخیر بشه.
سازگاری دادهها در عمل
سرویسها به دادههای مختلف نیاز دارند و هر کدوم سازگاری یا Consistency متفاوتی میطلبند:
- سرویس Leaderboard: نیاز به دادههای کاربری داره، ولی ممکنه آواتارها و نامهای نمایشی کمی قدیمی هم مشکلی ایجاد نکنه. این سرویس میتونه یک کپی محلی از دادههای کاربران داشته باشه.
- سرویس Notification: این سرویس نیاز به ایمیلهای بهروز داره تا به درستی به کاربران پیام ارسال کنه. اینجا شاید نیاز به همگامسازی دقیقتری باشه.
@DevTwitter | <Massimo Dev/>
👍20🔥7👎2
اقا یک دانلود منیجر دارم توسعه میدم شما میتونی ترد مشخص کنی و امکان resume و.. داره و میتونی یک لینک یا چند لینک بدید و بیشتر به درد ترمینال میخوره ولی دارم روی گرافیکش کار میکنم
https://github.com/rezabojnordi/shabi_download
دوست داشتید میتونید استفاده کنید و تعییرش بدید
@DevTwitter | <reza/>
https://github.com/rezabojnordi/shabi_download
دوست داشتید میتونید استفاده کنید و تعییرش بدید
@DevTwitter | <reza/>
👍65👎12❤7
دنبال یه سری منبع در مورد golang internals بودم که با این repository آشنا شدم، به صورت موضوعی لینک های خوبی رو معرفی کرده، دوست داشتید بررسی کنید.
https://github.com/emluque/golang-internals-resources
@DevTwitter | <Hossein Nazari/>
https://github.com/emluque/golang-internals-resources
@DevTwitter | <Hossein Nazari/>
❤17👍6🤣1
این دکوریتور رو تو بیشتر پروژههام استفاده میکنم؛ باهاش متدهاتون رو دکوریت کنید تا اگر اکسپشن هندل نشدهای رخ داد، بهجای توقف کل برنامه، اکسپشن رو لاگ کنه و هم پیامش تو یک کانال تلگرام بفرسته تا سریع متوجه بشید.
کد + مثال:
https://gist.github.com/mthri/5620feffe5bcdbdaaaf62a8f78ddab5d
باشد که رستگار شوید :)
@DevTwitter | <Amir Motahari/>
کد + مثال:
https://gist.github.com/mthri/5620feffe5bcdbdaaaf62a8f78ddab5d
باشد که رستگار شوید :)
@DevTwitter | <Amir Motahari/>
👍53👎8🤣6🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
هر کدوم از این کمپانی های بزرگ مثل گوگل، openAI، متا، و Anthropic یک سری ریپو دارن به اسم course یا cookbook که شامل کلی tutorial و مطلب آموزشی راجع به اینکه چطور با LLM ها بخصوص مدلها خوده این شرکتها کار کنید. این مطالب همش کلاس درسه با کیفیت بالا.
این لینک زیر از کمپانی Anthropic هست که شامل ۵ کورس میشه. ولی بقیه کمپانی ها هم ریپوهای مشابه دارن.
این ۵ کورس:
1- Anthropic API fundamentals
2- Prompt engineering interactive tutorial
3- Real world prompting
4- Prompt evaluations
5- Tool use
https://github.com/anthropics/courses/tree/master
@DevTwitter | <Mehdi Allahyari/>
این لینک زیر از کمپانی Anthropic هست که شامل ۵ کورس میشه. ولی بقیه کمپانی ها هم ریپوهای مشابه دارن.
این ۵ کورس:
1- Anthropic API fundamentals
2- Prompt engineering interactive tutorial
3- Real world prompting
4- Prompt evaluations
5- Tool use
https://github.com/anthropics/courses/tree/master
@DevTwitter | <Mehdi Allahyari/>
👍18❤5
بهینه سازی درخواست ها با collect کردن اونها در لاراول
https://www.harrisrafto.eu/supercharging-request-input-handling-in-laravel-with-collections/
@DevTwitter
https://www.harrisrafto.eu/supercharging-request-input-handling-in-laravel-with-collections/
@DevTwitter
👍16🔥4🤣3❤2
این ریپازیتوری گیتهاب همه\بیشتر ابزار های امنیت رو گذاشته :
github.com/Z4nzu/hackingtool
(خودم یه brute-force و world list میخواستم که گرفتم و دانلود کردم عملکرد خوبی هم داشت)
@DevTwitter | <Bugsbunny/>
github.com/Z4nzu/hackingtool
(خودم یه brute-force و world list میخواستم که گرفتم و دانلود کردم عملکرد خوبی هم داشت)
@DevTwitter | <Bugsbunny/>
👍27👎3
از این پروژه خیلی خوشم اومد. خیلی ساده و کوچیک هست.
برای وقتی هست که توی پروژه میخواهید از سرور اطلاعات رو بخونید. خیلی ساده یه فایل json یهش میدید و یه سرور بالا میاره.
اگه دوست داشتید حتی بدون نصب هم میشه با npx فراخونیش کرد و ازش استفاده کرد.
https://github.com/typicode/json-server
@DevTwitter | <Mohsen Shabanian/>
برای وقتی هست که توی پروژه میخواهید از سرور اطلاعات رو بخونید. خیلی ساده یه فایل json یهش میدید و یه سرور بالا میاره.
اگه دوست داشتید حتی بدون نصب هم میشه با npx فراخونیش کرد و ازش استفاده کرد.
https://github.com/typicode/json-server
@DevTwitter | <Mohsen Shabanian/>
👍27❤4👎3
چرا استفاده از Next.js میتواند تجربه برنامهنویسی شما را متحول کند؟
سرعت بالا و بهینهسازی SEO: یکی از بزرگترین مزایای استفاده از Next.js سرعت بارگذاری و سئو بهینه است. Next.js از رندرینگ سمت سرور (SSR) و رندرینگ استاتیک (SSG) پشتیبانی میکند که به نمایش سریعتر صفحات و ایندکس بهتر در موتورهای جستجو کمک میکند.
پشتیبانی از API های داخلی: نیازی به سرور جداگانه ندارید؛ میتوانید API های خود را در پروژه Next.js ایجاد کنید. این ویژگی برای ساخت سریع اپلیکیشنهای فولاستک بسیار کاربردی است.
بهبود تجربه کاربری با رندرینگ هیبریدی: با ترکیب SSR و SSG، صفحات پویا و استاتیک بهراحتی در یک پروژه قابل پیادهسازی هستند. این موضوع تجربه کاربری را ارتقا میدهد و بهینهسازی سرعت را بهبود میبخشد.
پشتیبانی از Image Optimization: مدیریت و بهینهسازی تصاویر با Next.js بسیار ساده است، بهویژه اگر سایت شما گرافیک بالایی دارد. این ویژگی باعث میشود تصاویر سریعتر بارگذاری شوند و حجم دادهها کاهش یابد.
پشتیبانی از React و مدرن بودن فریمورک: Next.js یک انتخاب عالی برای توسعهدهندگانی است که به React علاقه دارند، چرا که امکانات مدرن و انعطافپذیری بالایی در توسعه فراهم میکند.
@DevTwitter | <Amirhosein Rageie/>
سرعت بالا و بهینهسازی SEO: یکی از بزرگترین مزایای استفاده از Next.js سرعت بارگذاری و سئو بهینه است. Next.js از رندرینگ سمت سرور (SSR) و رندرینگ استاتیک (SSG) پشتیبانی میکند که به نمایش سریعتر صفحات و ایندکس بهتر در موتورهای جستجو کمک میکند.
پشتیبانی از API های داخلی: نیازی به سرور جداگانه ندارید؛ میتوانید API های خود را در پروژه Next.js ایجاد کنید. این ویژگی برای ساخت سریع اپلیکیشنهای فولاستک بسیار کاربردی است.
بهبود تجربه کاربری با رندرینگ هیبریدی: با ترکیب SSR و SSG، صفحات پویا و استاتیک بهراحتی در یک پروژه قابل پیادهسازی هستند. این موضوع تجربه کاربری را ارتقا میدهد و بهینهسازی سرعت را بهبود میبخشد.
پشتیبانی از Image Optimization: مدیریت و بهینهسازی تصاویر با Next.js بسیار ساده است، بهویژه اگر سایت شما گرافیک بالایی دارد. این ویژگی باعث میشود تصاویر سریعتر بارگذاری شوند و حجم دادهها کاهش یابد.
پشتیبانی از React و مدرن بودن فریمورک: Next.js یک انتخاب عالی برای توسعهدهندگانی است که به React علاقه دارند، چرا که امکانات مدرن و انعطافپذیری بالایی در توسعه فراهم میکند.
@DevTwitter | <Amirhosein Rageie/>
🔥40👎26👍12
توی پست میخوام راجب nginx proxy manager بنویسم
امروز روی یکی از سرور هایی که دستم بود nginx proxy manager آوردم و باید بگم زندگی 100 لول آسون تر شد :))
به صورت کلی nginx proxy manager یه reverse proxy هست که با یه UI ساده و زیبا در دسترس شماست البته یه سری قابلیت های out of the box هم با خودش داره که کارتون رو بشدت ساده تر میکنه
یکی از این قابلیت های جالبش SSL certificate بود که خودکار generate میشه و ست میشه و با یه کلیک تمدید میشه
چون من nginx proxy manager رو روی داکر آورده بودم بالا ، باید خود پروکسی رو هم می بردم روی یه شبکه مشترک با باقی سرویس ها توی داکر (network bridge).
تا پروکسی بتونه اونارو ببینه و بتونه route کنه مسیر رو بهشون.
یکی دیگه از قابلیت هاش اینه که میتونید دستی config بهش اضافه کنید و دستتون رو باز گزاشته برای کانفیگ nginx
و به همین راحتی شما با nginx proxy manager آشنا شدید :))
حالا کافیه یه سرور بیارید بالا و روش پروکسی رو بیارید بالا و بعد دامنه اتون رو توی CDN اتون point کنید به سمت سرورتون و تمام !»
@DevTwitter | <Ali-Sharify/>
امروز روی یکی از سرور هایی که دستم بود nginx proxy manager آوردم و باید بگم زندگی 100 لول آسون تر شد :))
به صورت کلی nginx proxy manager یه reverse proxy هست که با یه UI ساده و زیبا در دسترس شماست البته یه سری قابلیت های out of the box هم با خودش داره که کارتون رو بشدت ساده تر میکنه
یکی از این قابلیت های جالبش SSL certificate بود که خودکار generate میشه و ست میشه و با یه کلیک تمدید میشه
چون من nginx proxy manager رو روی داکر آورده بودم بالا ، باید خود پروکسی رو هم می بردم روی یه شبکه مشترک با باقی سرویس ها توی داکر (network bridge).
تا پروکسی بتونه اونارو ببینه و بتونه route کنه مسیر رو بهشون.
یکی دیگه از قابلیت هاش اینه که میتونید دستی config بهش اضافه کنید و دستتون رو باز گزاشته برای کانفیگ nginx
و به همین راحتی شما با nginx proxy manager آشنا شدید :))
حالا کافیه یه سرور بیارید بالا و روش پروکسی رو بیارید بالا و بعد دامنه اتون رو توی CDN اتون point کنید به سمت سرورتون و تمام !»
@DevTwitter | <Ali-Sharify/>
👍25❤5🔥5👎1
اگر در دنیای برنامهنویسی حرفهای وارد شدید و میخواهید به سطح بالاتری برسید، سایت Refactoring.Guru میتونه یکی از بهترین منابعی باشه که میتونید برای یادگیری Design Patterns استفاده کنید. این سایت به زبان ساده و با مثالهای کاربردی، به شما توضیح میده که چرا و چطور از این الگوها برای نوشتن کدهایی تمیزتر، منعطفتر و قابل نگهداری استفاده کنید.
الگوهای طراحی، به طور کلی، به شما کمک میکنن تا مشکلات پیچیده رو با استفاده از راهحلهای اثباتشده و استاندارد، در قالب ساختارهایی خاص و قابلاستفاده در پروژههای مختلف، حل کنید. این یعنی دیگه مجبور نیستید هر بار از صفر شروع کنید.
یکی از ویژگیهای مهم این سایت اینه که شما نه تنها با هر الگو آشنا میشید، بلکه میفهمید کجا و چرا باید از اون استفاده کنید. به همین دلیل، Refactoring.Guru یه مرجع عالی برای هر برنامهنویسیه که میخواد در کدنویسی حرفهای و بهینهتر بشه.
@DevTwitter | <Reza Annabestani/>
الگوهای طراحی، به طور کلی، به شما کمک میکنن تا مشکلات پیچیده رو با استفاده از راهحلهای اثباتشده و استاندارد، در قالب ساختارهایی خاص و قابلاستفاده در پروژههای مختلف، حل کنید. این یعنی دیگه مجبور نیستید هر بار از صفر شروع کنید.
یکی از ویژگیهای مهم این سایت اینه که شما نه تنها با هر الگو آشنا میشید، بلکه میفهمید کجا و چرا باید از اون استفاده کنید. به همین دلیل، Refactoring.Guru یه مرجع عالی برای هر برنامهنویسیه که میخواد در کدنویسی حرفهای و بهینهتر بشه.
@DevTwitter | <Reza Annabestani/>
👍45❤5🔥4
اصل single responsibility چرته
کلمه responsibility خودش خیلی کلمه نامفهومیه، اصلا responsibility ینی چی؟ شما وظیفه رو دقیقا چی تعریف میکنی؟ به چی میگی وظیفه؟
آقای uncle Bob در تعریف single responsibility میگه:
A class should have one and only one reason to change
ینی چی only one؟
در همین ابتدا میشه دو تا دلیل آورد که یه کلاس میتونه تغییر بکنه، یکی باگ فیکس و دومی فیچر اضافه کردن
الان تکلیف ما چیه؟ این تعریف رفت زیر سوال، ینی دیگه من single responsibility رو رعایت نکردم؟
حالا فرض کنید یه نفر یک کلاسی نوشته که دو تا متد داره، یکی کاربر رو ایجاد میکنه و یه متد دیگه داره به اون کاربر notification خوش آمد گویی ارسال میکنه.
آیا طبق معیاری به اسم single responsibility میشه گفت این کلاسی که تعریف کردم single responsibile هست؟
به نظرم من خیر نمیشه گفت
حالا معیار درست چی میتونه باشه؟
Cohesion
به نظرم معیار درست تر Cohesionهه، چرا؟
احتمالا وقتی که من کلاس بالارو براتون تعریف کردم به خودتون گفتید ارسال notification چه ربطی به ایجاد کاربر داره، دقیقا درست گفتید
معیار Cohesion بهتره چون شما میتونید ببینید متدهای که چیدید کنار هم چقدر به هم دیگه مرتبط هستند
با این معیار حالا میشه تصمیم گرفت که متد ارسال notification باید یک کلاس مستقل برای خودش بشه
@DevTwitter | <Amir Salehi/>
کلمه responsibility خودش خیلی کلمه نامفهومیه، اصلا responsibility ینی چی؟ شما وظیفه رو دقیقا چی تعریف میکنی؟ به چی میگی وظیفه؟
آقای uncle Bob در تعریف single responsibility میگه:
A class should have one and only one reason to change
ینی چی only one؟
در همین ابتدا میشه دو تا دلیل آورد که یه کلاس میتونه تغییر بکنه، یکی باگ فیکس و دومی فیچر اضافه کردن
الان تکلیف ما چیه؟ این تعریف رفت زیر سوال، ینی دیگه من single responsibility رو رعایت نکردم؟
حالا فرض کنید یه نفر یک کلاسی نوشته که دو تا متد داره، یکی کاربر رو ایجاد میکنه و یه متد دیگه داره به اون کاربر notification خوش آمد گویی ارسال میکنه.
آیا طبق معیاری به اسم single responsibility میشه گفت این کلاسی که تعریف کردم single responsibile هست؟
به نظرم من خیر نمیشه گفت
حالا معیار درست چی میتونه باشه؟
Cohesion
به نظرم معیار درست تر Cohesionهه، چرا؟
احتمالا وقتی که من کلاس بالارو براتون تعریف کردم به خودتون گفتید ارسال notification چه ربطی به ایجاد کاربر داره، دقیقا درست گفتید
معیار Cohesion بهتره چون شما میتونید ببینید متدهای که چیدید کنار هم چقدر به هم دیگه مرتبط هستند
با این معیار حالا میشه تصمیم گرفت که متد ارسال notification باید یک کلاس مستقل برای خودش بشه
@DevTwitter | <Amir Salehi/>
👎88👍27❤5🤣3
وردپرس 6.7 داره میاد!
و قراره کلی تغییرات باحال رو بیاره که میتونه تجربهمون با سایتهای وردپرسی رو کلی بهتر کنه. از یه تم جدید گرفته تا بهبودهای خفن تو ویرایشگر و کار با عکسها، این نسخه حسابی هیجانانگیزه!
چه خبرای جدیدیه؟
تم جدید: Twenty Twenty-Five – مناسب برای بلاگنویسها و کسایی که دنبال طراحی ساده و شیکن!
ویرایش راحتتر با قابلیت نمایش تمامصفحه – دیگه لازم نیست واسه صفحات طولانی هی بالا پایین کنی!
پشتیبانی از عکسهای HEIC – راحت عکسهای آیفون و آیپد رو آپلود کن، بدون افت کیفیت!
تایپوگرافی انعطافپذیر – متنت همیشه روی همه دستگاهها درست نمایش داده میشه!
با API پیشنمایش جدید – قبل از اینکه محتوای سایتت رو منتشر کنی، دقیقاً ببین چه شکلی میشه!
وردپرس 6.7 با کلی بهبود (بیش از 500 تا!) و رفع 200 تا باگ، قراره کار کردن با سایتهای وردپرسی رو راحتتر و سریعتر کنه. دیگه وقتشه سایتت رو آپدیت کنی و از این امکانات خفن استفاده کنی!
این نسخه جدید همهچیز رو برات آسونتر میکنه!
@DevTwitter | <Sajjad EhsanFar/>
و قراره کلی تغییرات باحال رو بیاره که میتونه تجربهمون با سایتهای وردپرسی رو کلی بهتر کنه. از یه تم جدید گرفته تا بهبودهای خفن تو ویرایشگر و کار با عکسها، این نسخه حسابی هیجانانگیزه!
چه خبرای جدیدیه؟
تم جدید: Twenty Twenty-Five – مناسب برای بلاگنویسها و کسایی که دنبال طراحی ساده و شیکن!
ویرایش راحتتر با قابلیت نمایش تمامصفحه – دیگه لازم نیست واسه صفحات طولانی هی بالا پایین کنی!
پشتیبانی از عکسهای HEIC – راحت عکسهای آیفون و آیپد رو آپلود کن، بدون افت کیفیت!
تایپوگرافی انعطافپذیر – متنت همیشه روی همه دستگاهها درست نمایش داده میشه!
با API پیشنمایش جدید – قبل از اینکه محتوای سایتت رو منتشر کنی، دقیقاً ببین چه شکلی میشه!
وردپرس 6.7 با کلی بهبود (بیش از 500 تا!) و رفع 200 تا باگ، قراره کار کردن با سایتهای وردپرسی رو راحتتر و سریعتر کنه. دیگه وقتشه سایتت رو آپدیت کنی و از این امکانات خفن استفاده کنی!
این نسخه جدید همهچیز رو برات آسونتر میکنه!
@DevTwitter | <Sajjad EhsanFar/>
🤣72👍45👎1
با استفاده از AI LLM با یک کلیک ویدیوهای کوتاه ایجاد کنید.
https://github.com/harry0703/MoneyPrinterTurbo
@DevTwitter | <homayoun/>
https://github.com/harry0703/MoneyPrinterTurbo
@DevTwitter | <homayoun/>
👍11👎6🤣5
برای توسعه برنامه دسکتاپ کراس پلتفرم با دات نت
- MAUI : لینوکس ساپورت نمیکنه
- Uno: بازم لینوکس ساپورت نمیکنه و با وب اسمبلی می تونی برنامه دسکتاپ بنویسی که بازم با الکترون فرقی نداره
- GtkSharp: برای لینوکس خوبه ولی برای مک و ویندوز مناسب نیست
- Avalonia: بهترین انتخاب همینه
@DevTwitter | <imun/>
- MAUI : لینوکس ساپورت نمیکنه
- Uno: بازم لینوکس ساپورت نمیکنه و با وب اسمبلی می تونی برنامه دسکتاپ بنویسی که بازم با الکترون فرقی نداره
- GtkSharp: برای لینوکس خوبه ولی برای مک و ویندوز مناسب نیست
- Avalonia: بهترین انتخاب همینه
@DevTwitter | <imun/>
🤣30👍13🔥7👎4❤1