Python BackendHub – Telegram
Python BackendHub
7.51K subscribers
314 photos
46 videos
11 files
432 links
Learning python & Backend Engineering, with Mani!

Youtube: https://www.youtube.com/@GitOverHere
Github: https://github.com/ManiMozaffar
Linkedin: https://www.linkedin.com/in/manimozaffar

تبلیغات نداریم

Admin: @Mani_nikou
Download Telegram
بنظرتون سخت ترین بحثی که یک برنامه نویس باهاش سروکله میزنه چیه؟
منظورم تو کد نویسیه.
@ManiFoldsPython
کامنتا جالب و متنوع بودن. نظره خودم هندل State هست. این موضوع به عنوان یک بک اند کار, شما رو اذیت میکنه. به عنوان فرانت کار بازم اذیتتون میکنه. حتی به عنوان دوآپس هم اذیتتون میکنه اگه چیزی که دارین دیپلوی میکنید خودش state داشته باشه (مثلا وب سوکت) یا بخواین اپی که state داره رو scale کنید. بنظرم همیشه بزرگ ترین چالش ها همین state بودن.

https://medium.com/97-things/behavior-is-easy-state-is-hard-b272356cf867
From my experience, the hardest bugs to solve are the ones caused by inconsistent state.

این مقاله رو داشتم میخوندم جالب بود. ولی با تیکه آخرش مخالفم و این قضیه state فقط به mutability object ربط نداره بلکه حالتیه که ما انتظار داشتیم باشه ولی تو واقعیت اونطوری نیست. تو واقعیت میتونه ناهماهنگی بین state چند سرویس باعث باگی بین اون سرویسا بشه. بذارین مثال بزنم:

فکر کنید ۳ تا سرویس دارین. سرویس A داره سفارشات رو میگیره, و ثبت میکنه. سرویس B پرداخت هارو پردازش میکنه از کردیت کارت مشتری. و سرویس C موجودی کالا رو به روز میکنه. هندل کردن این state که کالا یکی از موجودیش کم شه وقتی سفارش میاد و اگه پرداخت fail شه یکی زیاد شه و برگرده به حالش میتونه مثالی باشه از state management تو سطح چند تا سرویس که اگه باگی این وسط پیش میاد ممکنه پیچیده باشه troubleshoot کردنش.البته این یک مثال ساده ۲ خطی بود ولی امیدوارم context ماجرا رو فهمیده باشین.

سوالی که پیش میاد اینه که چیکار کنیم؟ یک سری دیزاین پترن های Behavioral وجود دارن که کارشون هندل state هست به روش های مختلف و در ادامه دوره دیزاین پترن از امشب از Creator pattern به سمت Behavioral pattern میریم و مثال واقعی تر میزنم براتون.
یک چیزی که تو کل دوره گفتم اینه که بد ترین کاری که میتونید کنید اینه که به جای اینکه دیزاین پترن رو درک کنید و بفهمیدش سعی کنید سریع همه جا ازش استفاده کنید. دیزاین پترن در واقع به شما قدرت حل مسئله به روش های مختلف رو میده و میتونید از ابعاد خارج از کدتون هم بهش نگاه کنید همیشه.

@ManiFoldsPython
👍18
به بخش دوم, قسمت هفتم پلی لیست دیزاین پترن رسیدیم 🎉

همیشه مدیریت state و رفتار کد هامون سخت بوده. دیزاین پترن های Behavioral به ما کمک میکنن که بتونیم بین آبجکت هامون ارتباط قوی تری داشته باشیم و state رو داخل کدمون بهتر هندل کنیم. نکته مهم دیزاین پترن ها به طور کلی اینه که کانپست پشتشون رو درک کنید به جای اینکه فقط سعی کنید theoryشون رو حفظ کنید و تکرارشون کنید.

تو این ویدیو قراره بپردازیم به دیزاین پترن observer و بررسی کنیم یوزکیسش رو, دیزاین پترنی که خیلی جاها استفاده شده و حتما خودمون هم ازش استفاده کردیم, مثل سینگال در جنگو یا عوض شدن توکن در فایربیس یا ارتباط وب هوک با یک سیستم دیگه.

https://www.youtube.com/watch?v=bPTBXprf2kc

لینک گیتهاب دوره دیزاین پترن; جزوه و مثال های دوره همه اینجا ذخیره خواهند شد.
https://github.com/ManiMozaffar/design-101

@ManiFoldsPython
👍6🔥3
به نظرتون یک فانکشن در چه صورتی خوبه؟ چه فاکتوری وجود داره که میگین عجب فانکشن خوبی؟ مثلا به قول مارتین بیشتر از ۱۴ خط باشه bad smell عه؟ 😁
@ManiFoldsPython
👍3
Python BackendHub
به نظرتون یک فانکشن در چه صورتی خوبه؟ چه فاکتوری وجود داره که میگین عجب فانکشن خوبی؟ مثلا به قول مارتین بیشتر از ۱۴ خط باشه bad smell عه؟ 😁 @ManiFoldsPython
تو کامنتا تا حدی اشاره کردن, نظره خودم:

اینکه بخواین با خط کش کدتونو اندازه بگیرین بنظره من ملاک کلین کدی نیست. مثلا میگن اگه اول فانکشن if بیاد پس function بدیه. اوکی متوجهم چرا اینو میگن چون میتونست شرطه به نحوی تو خود arg ها بیاد ولی یک وقتا پیش میاد. یا مثلا میگن اگه ۳ تا nested بخوره پس فانکشن بدیه. اینا هیچکدوم objective نیستن و ممکنه پیش بیان و کاملا هم منطقی باشن و ملاک تمیز بودن کدمون نیست.

ملاک تمیزی یک فانکشن بنظره من, چهار چیزه:

۱. Composable بودن اون تابع
اگه متوجه نشدین لینک زیر رو بخونید
https://en.wikipedia.org/wiki/Function_composition_(computer_science)

۲. فقط یک کار انجام بده.

۳. وقتی signature و اسم فانکشن رو برای اولین بار میخونیم و مقایسش میکنیم با کد فانکشن, سورپرایز نشیم!

۴. ساید افکتی نداشته باشه که از رو اسم و signature فانکشن مشخص نباشه.

@ManiFoldsPython
👍17
یکی از جاهایی که خیلی میتونید یاد بگیرین github هست
برین یک لایبری خوب
یک pr که داره مرج میشه
دیسکاسشنش رو بخونید
یک لایبری رو برین که متوجه discussion اش بشید. مثلا ML نباشه
مثلا اگه بک اند کارین میتونید برین PR های جنگو و فست و فلسک و سلری و غیره رو بخونید.

اینطوری باعث میشه هم
۱. کالچر review کردن رو یاد بگیرین
۲. کلی چیز یاد میگیرین از maintainer های اون لایبری
۳. خوده اون لایبری هم دیپ تر میشین. مثلا اگه سلریه بروکر هارو دیپ تر میشین.

سعی کنید PR های بزرگو بخونید نه اونی که یک خط مشکل داکو رو درست کرده 😁 از تایتل ‍PR و تعداد دیسکاسشن هاش مشخصه.

@ManiFoldsPython
👍18
Channel name was changed to «Python BackendHub»
Channel photo updated
در قسمت هشتم پلی لیست دیزاین پترن
تو این قسمت State Pattern رو بررسی کردیم, توضیح دادم که چرا این پترن خیلی خوبه و میتونه encapsulation تمیزی بهتون بده برای هر state از context و سیستمتون و البته گفتم چرا design pattern ناقصی هست و ضعفش چیه که مقدمه ای شد برای ویدیو بعدی, پترن Type State که بنظرم بهترین ویدیو این پلی لیسته خواهد شد.

لینک ویدیو:
https://youtu.be/wGAzhp8ljAk

لینک گیتهاب دوره دیزاین پترن; جزوه و مثال های دوره همه اینجا ذخیره خواهند شد:
https://github.com/ManiMozaffar/design-101


@PyBackEndHub
👍6
کاربرد گروهو میخوام تغییر بدم
به گروهی برای رفع مشکل و بحث در خصوص Backend Engineering و پایتون

مرجعی هم بشه که بتونید کلا سوالات flask یا kafka یا rabbitmq یا FastAPI یا ORM هرچیز دیگه ای که ممکنه براش community پیدا نکنید. لینک:

https://news.1rj.ru/str/PythonFellow

خوشحال میشم جوین شید. قانون خاصی نداره به جز حفظ احترام اعضای گروه.

@PyBackEndHub
👍133
Rebrand کردیم
اشتباهی لیو ندین 😅
ManiFoldsPython سابقیم :))
بهتر شد؟ بنظره خودم اره.

@PyBackEndHub
👍25👎25😱2😁1
https://github.com/airtai/faststream

این لایبری رو برای کار کردن با بروکر ها چند وقت پیش معرفی کردم و الان داره به جاهای خیلی خوبی میبرسه جوری که وسوسه شدم ازش استفاده کنم 👌

@PyBackEndHub
🔥4👍1
ایراد دیزاین این کد چیست؟

موضوع ویدیو بعدی 🔥🔥
@PyBackEndHub
💩7🤔3
Python BackendHub
ایراد دیزاین این کد چیست؟ موضوع ویدیو بعدی 🔥🔥 @PyBackEndHub
تو کامنتا اشاره کردن جوابش خیلی راحته اینه که یک کلس بنویسیم و تو کاسنتراکتورش init کنیم اپ رو. و این یک کاسنپت خیلی مهم پشتشه. که دقیقا چه اتفاقی میفته باعث بهتر شدن کیفیت کد میشه.
خیلی وقتا غریزی اینکار رو انجام میدیم
خیلی وقتا هم انجام نمیدیم!‌مثل کسایی که لایبری firebase رو نوشتن تو پایتون!

موضوع ویدیو بعدی TypeState هست که عمیق تر به این ۵ خط کد میپردازم و یوزکیس های خیلی بیشتری رو میگم که خیلی کم میبینم تو یک سری کد ها رعایت شده این کانسپت به خوبی.
@ManiFoldsPython
🤓6👍1
اینم یک مثال دیگه که تو ویدیو بهش میپردازم.

ایراد این کد چیست؟

@ManiFoldsPython
💩5🤔4
Python BackendHub
اینم یک مثال دیگه که تو ویدیو بهش میپردازم. ایراد این کد چیست؟ @ManiFoldsPython
ایراداتی گرفتن از کد ولی هیچکس اشاره نکرد این کد امن نیست!

این کد میتونه به دلایل خیلی زیادی fail شه
اگه ایمیل واقعا ایمیل نباشه
اگه mime multipart خوب ساخته نشه
اگه noscript و content خالی باشن
اگه email client لاگین نشه

در نتیجه تجربه توسعه رو به شدت افت میده و باعث میشه وقتی کد بیستون خیلی بزرگ شد کدتون اسپاگتی بشه و هیچوقت حس خوبی موقع توسعه نداشته باشین.


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

@ManiFoldsPython
👍7
Python BackendHub
در قسمت هشتم پلی لیست دیزاین پترن تو این قسمت State Pattern رو بررسی کردیم, توضیح دادم که چرا این پترن خیلی خوبه و میتونه encapsulation تمیزی بهتون بده برای هر state از context و سیستمتون و البته گفتم چرا design pattern ناقصی هست و ضعفش چیه که مقدمه ای شد…
در قسمت نهم پلی لیست دیزاین پترن و مهم ترین قسمت این پلی لیست, پرداختم به دیزاین پترن Type State. پترنی که سبک کد نویسی من رو به شدت تغییر داد و هر روز ازش استفاده میکنم

مفاهیم زیر رو ابتدا توضیح دادم:
- Don't validate, parse!
- Type safe operations

و توضیح دادم چطور به صورت غریزی و ابتدایی از type state استفاده میکنیم. همینطور یوزکیس های خیلی بهتر و advance تر هم توضیح دادم و دلیل محبوبیت Pydantic هم توضیح دادم.
با Type state pattern کد هاتون به شدت باگ کمتری خواهند داشت پس اگه دوست دارین کمتر با باگ سروکله بزنید این ویدیو رو از دست ندید. حتما توصیه میشه قبل از دیدن این ویدیو, ویدیو قبلی راجب state pattern هم ببینید که ۱۰ دقیقه هست.


لینک ویدیو:
https://youtu.be/DwAQ6dm-Vn8

لینک گیتهاب دوره دیزاین پترن; جزوه و مثال های دوره همه اینجا ذخیره خواهند شد:
https://github.com/ManiMozaffar/design-101

@PyBackEndHub
7
Python BackendHub
در قسمت نهم پلی لیست دیزاین پترن و مهم ترین قسمت این پلی لیست, پرداختم به دیزاین پترن Type State. پترنی که سبک کد نویسی من رو به شدت تغییر داد و هر روز ازش استفاده میکنم مفاهیم زیر رو ابتدا توضیح دادم: - Don't validate, parse! - Type safe operations و توضیح…
دوستانی که ویدیو های اخیر رو دیدن خیلی ممنون میشم اگه نظرشون و فیدبکشون رو داشته باشم. وب کم گرفتم که تصویرم مستقیم باشه, صدا رو هم خیلی زیاد و باکیفیت تر کردم.

خیلیام نمیدونن من تاحالا چه محتواهایی تولید کردم.
دوره دیزاین پترن - ۹ قسمت منتشر شده. تقریبا ۱۵ قسمت دیگه ازش مونده. تصمیم گرفتم functional pattern و بقیه پترن هارو تو یک پلی لیست دیگه قرار بدم.

دوره تست نویسی - ۸ قسمت منتشر شده. ۱۰ قسمت دیگه باقی مونده

دوره رشد مسیر شغلی و اموزش رزومه نویسی - ۴ قسمت منتشر شده. ۲ قسمت دیگه باقی مونده

تلاشمو میکنم هفته ای ۱-۲ ویدیو بدم (جمعه تا یک شنبه).
هفته گذشته چون ویروس عجیبی گرفتم نبودم کلا :))

@PyBackEndHub
👍13👏53🔥1
Python BackendHub
اینم یک مثال دیگه که تو ویدیو بهش میپردازم. ایراد این کد چیست؟ @ManiFoldsPython
کد به همچین شکلی تغییر کرد در نهایت که تو ویدیو توضیح دادم چه قدر فواید خوبی داره این سبک کد زدن:



def send_email(client: MailClient, rec_addr: EmailString, noscript: str, content: str):
email = client.build_email_body(noscript, content, rec_addr)
client.send_emails([email])


این کد به شدت امنه و فقط به شرطی fail میشه که یا خط دوم (ساخت ایمیل) اتفاق نیفته و یا تو خط سوم یک دفعه مشکل کانکشن پیش بیاد (کلاینت لاگین شده تو constructorاش و کاملا type safe هست)

@PyBackEndHub
👍5👎2🤔2
اینم اضافه کنم Typestate به شدت بین rust developer ها محبوبه و توصیه میکنم بعد ویدیو مقاله زیر رو هم بخونید

https://cliffle.com/blog/rust-typestate/#what-are-typestates

@PyBackEndHub
👍6