Pure Coder
Fluttery's Journey (55 %) 🆕 دوره ی جدید و خاص فلاترمون به زودی شروع میشه😍😍 ✈️ قراره یه سفر به اعماق فلاتر داشته باشیم... 🏝 در این سفر با درخت های مختلف فلاتر، از جمله Element Tree و Render Tree به خوبی اشنا میشیم. 🖼 با layout phase و paint phase که بعد…
دوستان پرداخت هزینه ی دوره به صورت کارت به کارت هست و برای ثبت نام به اکانت های ذکر شده پیام بدید...
همچنین پرداخت هزینه الان انجام نمیشه و الان به کانال پشتیبانی دوره اضافه میشید و موقع شروع دوره توی کانال (دوره) اطلاع رسانی میشه و همون موقع هم پرداخت هزینه ها انجام میشه...
همچنین پرداخت هزینه الان انجام نمیشه و الان به کانال پشتیبانی دوره اضافه میشید و موقع شروع دوره توی کانال (دوره) اطلاع رسانی میشه و همون موقع هم پرداخت هزینه ها انجام میشه...
🔥Tip
🔥Clean Code - private static methods
❓متدهای private static چطوری میتونن به کلین شدن کد کمک کنن؟
✅توی مقاله ی کوچولوی زیر یکم راجبش صحبت کردم:
https://purecoder.ir/clean-code-and-private-static-methods/
😍حتمن بخونش...ضرر نمیکنی...
@purecoder_ir
🔥Clean Code - private static methods
❓متدهای private static چطوری میتونن به کلین شدن کد کمک کنن؟
✅توی مقاله ی کوچولوی زیر یکم راجبش صحبت کردم:
https://purecoder.ir/clean-code-and-private-static-methods/
😍حتمن بخونش...ضرر نمیکنی...
@purecoder_ir
Pure Coder
نظر سنجی
فرض کنید پروژه ای دارید که براش تست نوشتید، حالا قراره که بین clean بودن پروداکشن کد و clean بودن تست یکی رو انتخاب کنید (همه چیز فرضی هست)
کدوم رو انتخاب میکنید؟
فرض کنید پروژه ای دارید که براش تست نوشتید، حالا قراره که بین clean بودن پروداکشن کد و clean بودن تست یکی رو انتخاب کنید (همه چیز فرضی هست)
کدوم رو انتخاب میکنید؟
توی این نظر سنجی فقط ۱۶ درصد کلین بودن تست رو انتخاب کردن در مقابل ۸۴ درصد کلین بودن پروداکشن کد رو اولویت قرار دادن...
دوستان یکی از ویژگی های مهم تست و به خصوص یونیت تست این هست که بهت این اطمینان رو بده که بتونی کدت رو پیوسته و بدون ترس ریفکتور کنی...
حالا اگه خود تست کلین نباشه، چطوری میتونه این نقش رو به خوبی بازی کنه؟
ایا نباید تست توی اولویت بالاتر قرار بگیره؟
ببینید باز هم میگم کدی که مینویسیم از ابتدا کلین نیست و در ابتدا فقط کار میکنه و قراره پیوسته ریفکتور بشه تا کلین بشه...
این تست هست که اگه به خوبی نوشته شده باشه میتونه بهت این اطمینان رو بده که کدت رو کلین کنی... حالا اگه خودش کلین نباشه، داستان چه جوری
میخاد پیش بره؟
اگه کسی میتونه ادعا کنه که همیشه و در همه حال از همون ب بسم الله پروداکشن کدش رو کلین مینویسه و نیازی به ریفکتور نداره ... من حرفی ندارم 😁
@purecoder_ir
دوستان یکی از ویژگی های مهم تست و به خصوص یونیت تست این هست که بهت این اطمینان رو بده که بتونی کدت رو پیوسته و بدون ترس ریفکتور کنی...
حالا اگه خود تست کلین نباشه، چطوری میتونه این نقش رو به خوبی بازی کنه؟
ایا نباید تست توی اولویت بالاتر قرار بگیره؟
ببینید باز هم میگم کدی که مینویسیم از ابتدا کلین نیست و در ابتدا فقط کار میکنه و قراره پیوسته ریفکتور بشه تا کلین بشه...
این تست هست که اگه به خوبی نوشته شده باشه میتونه بهت این اطمینان رو بده که کدت رو کلین کنی... حالا اگه خودش کلین نباشه، داستان چه جوری
میخاد پیش بره؟
اگه کسی میتونه ادعا کنه که همیشه و در همه حال از همون ب بسم الله پروداکشن کدش رو کلین مینویسه و نیازی به ریفکتور نداره ... من حرفی ندارم 😁
@purecoder_ir
There's a hell of a lot of code out there in OO languages that is procedural in design.
The OO community may have 'won' in the sense that modern languages are dominated by objects, but they are still yet to win in that OO programming is still not widely used.
💥Martin Fowler💥
⚪️ این جمله ی Martin Fowler رو جدی بگیرید.
صرف اینکه از یک زبان Object Oriented استفاده میکنید، به این معنا نیست که کدهایی که میزنید طبق Object Oriented هست !!!!
@purecoder_ir
The OO community may have 'won' in the sense that modern languages are dominated by objects, but they are still yet to win in that OO programming is still not widely used.
💥Martin Fowler💥
⚪️ این جمله ی Martin Fowler رو جدی بگیرید.
صرف اینکه از یک زبان Object Oriented استفاده میکنید، به این معنا نیست که کدهایی که میزنید طبق Object Oriented هست !!!!
@purecoder_ir
تنها چیزی که توی دنیای برنامه نویسی روش تعصب دارم VS Code هست 😁
هیچ جوره نمیتونم ترکش کنم و از یه چیز دیگه استفاده کنم 😅
هر زبان و فریمورکی هم که باشه بالاخره باید یه راهی پیدا کنم که بتونم با VS Code ازش استفاده کنم😍😅
@purecoder_ir
هیچ جوره نمیتونم ترکش کنم و از یه چیز دیگه استفاده کنم 😅
هر زبان و فریمورکی هم که باشه بالاخره باید یه راهی پیدا کنم که بتونم با VS Code ازش استفاده کنم😍😅
@purecoder_ir
#سوال_مصاحبه
❓یه توضیح خوب و مفهومی راجب Object Oriented بده...
✅کلن چیه....
✅هدفش چیه...
✅خوبی ها و معایبش چیه...
@purecoder_ir
❓یه توضیح خوب و مفهومی راجب Object Oriented بده...
✅کلن چیه....
✅هدفش چیه...
✅خوبی ها و معایبش چیه...
@purecoder_ir
کدوم یک از اصول سالید به طور خاص بر inheritance نظارت میکنه و قوانینی رو در این باره ارائه میده؟
Anonymous Quiz
10%
Single Responsibility
20%
Open-Closed
29%
Liskov Substitution
21%
Interface Segregation
20%
Dependency Inversion
🔥Command Query Separation
😍یه داستان دیگه از Pure Coder که بهمون کمک میکنه کدهای clean تر بنویسیم....
🔥توی این قسمت قراره از دنیای Functional Programming کمک بگیریم...
https://purecoder.ir/command-query-separation/
@purecoder_ir
😍یه داستان دیگه از Pure Coder که بهمون کمک میکنه کدهای clean تر بنویسیم....
🔥توی این قسمت قراره از دنیای Functional Programming کمک بگیریم...
https://purecoder.ir/command-query-separation/
@purecoder_ir
با اعمال Template Method Pattern کدوم از اصول زیر اعمال میشن؟
Anonymous Quiz
16%
Open-Closed
15%
Liskov substitution
36%
Don't Repeat Yourself (DRY)
33%
All items
کدوم یک از اصول سالید راهکاری برای کاهش Dependency به Fat Class هایی که امکان خورد کردنشون به کلاس های کوچکتر نیست رو ارائه میده؟
Anonymous Quiz
22%
Single Responsibility
10%
Open-Closed
14%
Liskov substitution
25%
Interface Segregation
29%
Dependency Inversion
Pure Coder
کدوم یک از اصول سالید راهکاری برای کاهش Dependency به Fat Class هایی که امکان خورد کردنشون به کلاس های کوچکتر نیست رو ارائه میده؟
❌اصل Dependency Inversion که اکثرن ذهنتون رفته سمتش بحثش جداست...
✅اینجا شما یه Fat Class دارید... یعنی یه کلاس چاق و چله که احتمالن Responsibility های مختلفی هم داره و به هر دلیلی نمیتونید اون رو به کلاس های کوچکتر خورد کنید و Responsibility هاش رو تفکیک کنید...
حالا توی سیستم کلاس های مختلفی دارید که به این Fat Class وابستگی دارن ولی هر کدوم به یک جنبه ی این کلاس وابسته ان و از همه ی متد هاش استفاده نمیکنن..
در نتیجه یه سری Interface کوچولو کوچولو درست میکنید و Fat Class اون ها رو implement میکنه و کلاس هایی که بهش وابسته بودن، از این به بعد به اون اینترفیس ها وابسته میشن و اینجوری Fat Class رو یه گوشه ی سیستم محصورش میکنیم و با وجود داشتن Responsibility های زیاد، با کاهش Dependency ای که سایر کلاس ها بهش دارن، یکمی دردش رو کمتر میکنیم...
⚠️البته یکی از موارد کاربرد ISP هست...
@purecoder_ir
✅اینجا شما یه Fat Class دارید... یعنی یه کلاس چاق و چله که احتمالن Responsibility های مختلفی هم داره و به هر دلیلی نمیتونید اون رو به کلاس های کوچکتر خورد کنید و Responsibility هاش رو تفکیک کنید...
حالا توی سیستم کلاس های مختلفی دارید که به این Fat Class وابستگی دارن ولی هر کدوم به یک جنبه ی این کلاس وابسته ان و از همه ی متد هاش استفاده نمیکنن..
در نتیجه یه سری Interface کوچولو کوچولو درست میکنید و Fat Class اون ها رو implement میکنه و کلاس هایی که بهش وابسته بودن، از این به بعد به اون اینترفیس ها وابسته میشن و اینجوری Fat Class رو یه گوشه ی سیستم محصورش میکنیم و با وجود داشتن Responsibility های زیاد، با کاهش Dependency ای که سایر کلاس ها بهش دارن، یکمی دردش رو کمتر میکنیم...
⚠️البته یکی از موارد کاربرد ISP هست...
@purecoder_ir
✅Single Responsibility Principle:
Each module should have only one reason to change.
✅Open-Closed Principle:
Software entities should open for extension and closed for modification.
✅Liskov Substitution Principle:
A Sub class should be substituable for its super class.
✅Interface Segregation Principle:
Don't depend on things you don't need.
✅Dependency Inversion Principle:
High-level modules should not depend on low-level modules. Both should depend on abstractions.
Abstractions should not depend on details. Details should depend on abstractions.
@purecoder_ir
Each module should have only one reason to change.
✅Open-Closed Principle:
Software entities should open for extension and closed for modification.
✅Liskov Substitution Principle:
A Sub class should be substituable for its super class.
✅Interface Segregation Principle:
Don't depend on things you don't need.
✅Dependency Inversion Principle:
High-level modules should not depend on low-level modules. Both should depend on abstractions.
Abstractions should not depend on details. Details should depend on abstractions.
@purecoder_ir
Forwarded from Persian Flutter (PayamZ)
میدونید توسعه و اجرای اپ های Flutter روی Raspberry Pi چقدر آسون شده؟
تو چند ماه اخیر تونستیم چندین ابزار رو توسعه بدیم که هر کدوم کلی این کار رو راحت میکنه
برای آموزش کامل ویدیو زیر رو ببینید
لایک و کامنت فراموش نشه
https://www.youtube.com/watch?v=tCOMqP8RPB4
تو چند ماه اخیر تونستیم چندین ابزار رو توسعه بدیم که هر کدوم کلی این کار رو راحت میکنه
برای آموزش کامل ویدیو زیر رو ببینید
لایک و کامنت فراموش نشه
https://www.youtube.com/watch?v=tCOMqP8RPB4
YouTube
Run a Flutter app on a Raspberry Pi - Directly from your host device
In this video, we'll guide you through the seamless process of installing and running your Flutter app directly from your host machine on a Raspberry Pi.
-----------------------------------------------------------------------------------------
In the video…
-----------------------------------------------------------------------------------------
In the video…
Pure Coder
با اعمال Template Method Pattern کدوم از اصول زیر اعمال میشن؟
پترن Template Method رو در نظر بگیرید
یه base class داریم که معمولن abstract هست و چندین تا concrete class که extend اش میکنن ...
بنظرتون در ابتدا باید کد abstract class رو بنویسیم و بعد کد concrete class ها رو یا برعکس ... کدومشون اول قرار میگیرن ؟
یه base class داریم که معمولن abstract هست و چندین تا concrete class که extend اش میکنن ...
بنظرتون در ابتدا باید کد abstract class رو بنویسیم و بعد کد concrete class ها رو یا برعکس ... کدومشون اول قرار میگیرن ؟
Anonymous Poll
59%
اول abstract و بعد concrete ها
23%
اول concrete ها و بعد abstract
19%
دیدن نتایج
Pure Coder
پترن Template Method رو در نظر بگیرید
یه base class داریم که معمولن abstract هست و چندین تا concrete class که extend اش میکنن ...
بنظرتون در ابتدا باید کد abstract class رو بنویسیم و بعد کد concrete class ها رو یا برعکس ... کدومشون اول قرار میگیرن ؟
یه base class داریم که معمولن abstract هست و چندین تا concrete class که extend اش میکنن ...
بنظرتون در ابتدا باید کد abstract class رو بنویسیم و بعد کد concrete class ها رو یا برعکس ... کدومشون اول قرار میگیرن ؟
ابسترکشن ها کشف میشن، ابداع نمیشن ...
شما در ابتدا یه کلاس داری که داره یه کاری رو انجام میده و نیازی به ابسترکشن نداره ...
کلن یه دونس
در آینده ممکنه یه کلاس دیگه اضافه بشه که همون کار رو از با کمی تفاوت در جزئیات انجام میده ...
اینجاست که شما بین این دو کلاس یه سری اشتراکات پیدا میکنی و در صدد رفع duplication ها بر میای و با ایجاد یه ابسترکشن یه مفهوم جنرال بوجود میاری
یک خوره ای که به جون خیلی از برنامه نویس ها میوفته اینه که وقتی فقط یه implementation دارن یه اینترفیس هم ایجاد میکنن
خوره ی ایجاد اینترفیس دارن (از جمله خود من🤣)
ینی کد رو که میبینی هی اینترفیس ساختن و فقط یه implementation براش ...
شاید بگن open closed یا Dependency Inversion یا چه و چه و چه رو میخوایم رعایت کنیم ...ولی
1⃣اصول رو باید درست فهمید
2⃣هر چیزی باید به وقتش انجام بشه
3⃣اصول باید به ما کمک کنن نه اینکه دست و پا گیر بشن ...وقتی کمک میکنن که به وقتش اعمال بشن و واقعن نیاز باشن
مثلن یه پروژه رو کلن از اول تا آخر داری monolith میبری جلو و دائمن هم نگران DIP هستی؟ یا ...
خیلی معنی نمیده!!!!
@purecoder_ir
شما در ابتدا یه کلاس داری که داره یه کاری رو انجام میده و نیازی به ابسترکشن نداره ...
کلن یه دونس
در آینده ممکنه یه کلاس دیگه اضافه بشه که همون کار رو از با کمی تفاوت در جزئیات انجام میده ...
اینجاست که شما بین این دو کلاس یه سری اشتراکات پیدا میکنی و در صدد رفع duplication ها بر میای و با ایجاد یه ابسترکشن یه مفهوم جنرال بوجود میاری
یک خوره ای که به جون خیلی از برنامه نویس ها میوفته اینه که وقتی فقط یه implementation دارن یه اینترفیس هم ایجاد میکنن
خوره ی ایجاد اینترفیس دارن (از جمله خود من🤣)
ینی کد رو که میبینی هی اینترفیس ساختن و فقط یه implementation براش ...
شاید بگن open closed یا Dependency Inversion یا چه و چه و چه رو میخوایم رعایت کنیم ...ولی
1⃣اصول رو باید درست فهمید
2⃣هر چیزی باید به وقتش انجام بشه
3⃣اصول باید به ما کمک کنن نه اینکه دست و پا گیر بشن ...وقتی کمک میکنن که به وقتش اعمال بشن و واقعن نیاز باشن
مثلن یه پروژه رو کلن از اول تا آخر داری monolith میبری جلو و دائمن هم نگران DIP هستی؟ یا ...
خیلی معنی نمیده!!!!
@purecoder_ir
Forwarded from My Flutter Experience💙 (Abolfazl)
⭕️از فلاتر تا مارکت😳
قدم به قدم مراحلی که باید برای دپلویی کردن اپلیکیشن ها روی مارکت ها بگذرونید 😁
از ساختن پروژه فلاتری تا امضا و رفع خطا های همیشگی و دپلویی کردن و.....
https://youtu.be/3P8R_f78FZE
قدم به قدم مراحلی که باید برای دپلویی کردن اپلیکیشن ها روی مارکت ها بگذرونید 😁
از ساختن پروژه فلاتری تا امضا و رفع خطا های همیشگی و دپلویی کردن و.....
https://youtu.be/3P8R_f78FZE
YouTube
آموزش فلاتر:قدم به قدم بارگزاری اپلیکیشن های فلاتری روی مارکت ها
سلام رفقا امیدوارم حال دلتون عالی باشه ، توی این ویدو در مورد بارگذاری اپلیکیشن های فلاتری روی مارکت های مختلف صحبت میکنیم ،بارگذاری اپلیکیشن های فلاتری یکی از مهم ترین و کلیدی ترین و در عین حال چالش بر انگیز ترین کار هایی که هر flutter developer باید بلد…
🔥انواع دیتابیس ها
دیتابیس ها رو میشه به دو دسته ی کلی SQL و No SQL تقسیم کرد که خود No SQL ها انواع مختلف دارن که از جمله ی اون های نوع key-value و document هستن....
ℹ️Relational Databases (SQL)
👉MySQL, SQL Server, Oracle, Postgre SQL, SQLite, ...
2️⃣Non-Relational databases (No SQL)
✅Key-value Store or Key-value cache
👉Redis, ...
✅Document Database
👉MongoDb, ...
✅Object Storage
✅Table Storage
✅Graph Database
✅...
@purecoder_ir
دیتابیس ها رو میشه به دو دسته ی کلی SQL و No SQL تقسیم کرد که خود No SQL ها انواع مختلف دارن که از جمله ی اون های نوع key-value و document هستن....
ℹ️Relational Databases (SQL)
👉MySQL, SQL Server, Oracle, Postgre SQL, SQLite, ...
2️⃣Non-Relational databases (No SQL)
✅Key-value Store or Key-value cache
👉Redis, ...
✅Document Database
👉MongoDb, ...
✅Object Storage
✅Table Storage
✅Graph Database
✅...
@purecoder_ir
🤦♂شاید خیلی از برنامه نویس های موبایل عادت به تست نوشتن نداشته باشن ...
🤔یکی از دلایلش میتونه این باشه که پروژشون لاجیک خیلی خاصی نداره و در کل داره یه سری دیتا از سرور میگیره و نمایش میده و پردازشی روی دیتا ها انجام نمیده ...و در نتیجه خیلی سادس و بخاطر همین حوصله ی وقت گذاشتن و unit test نوشتن رو ندارن ..
❓سوال
در چنین مواقعی تست بنویسیم یا نه ؟
✅فقط برای قسمت هایی که لاجیک و پیچیدگی دارن unit test بنویسید و در نتیجه در چنین شرایطی تعداد unit test ها کم میشه و حتا ممکنه صفر بشه .
✅ولی حتمن توی چنین پروژه ها integration test بنویسید.
پ.ن: در شرایط عادی میگن که تعداد unit test های پروژه به تعداد integration test ها میچربه ولی وقتی پروزه complexity خاصی نداره ارزش هزینه کردن و unit test زدن نداره، ولی integration test در هر شرایطی باید نوشته بشه.
پس توی چنین پروژه هایی نسبت برعکس میشه و تعداد integration test ها به unit test ها غلبه میکنه.
@purecoder_ir
🤔یکی از دلایلش میتونه این باشه که پروژشون لاجیک خیلی خاصی نداره و در کل داره یه سری دیتا از سرور میگیره و نمایش میده و پردازشی روی دیتا ها انجام نمیده ...و در نتیجه خیلی سادس و بخاطر همین حوصله ی وقت گذاشتن و unit test نوشتن رو ندارن ..
❓سوال
در چنین مواقعی تست بنویسیم یا نه ؟
✅فقط برای قسمت هایی که لاجیک و پیچیدگی دارن unit test بنویسید و در نتیجه در چنین شرایطی تعداد unit test ها کم میشه و حتا ممکنه صفر بشه .
✅ولی حتمن توی چنین پروژه ها integration test بنویسید.
پ.ن: در شرایط عادی میگن که تعداد unit test های پروژه به تعداد integration test ها میچربه ولی وقتی پروزه complexity خاصی نداره ارزش هزینه کردن و unit test زدن نداره، ولی integration test در هر شرایطی باید نوشته بشه.
پس توی چنین پروژه هایی نسبت برعکس میشه و تعداد integration test ها به unit test ها غلبه میکنه.
@purecoder_ir
🔥Value Object
⭕️هر ابجکتی یه سری فیلد داره و یک سری متد داره که یه بلاهایی سر اون فیلد ها میارن
⭕️این متد ها میتونن مقدار فیلد ها رو تغییر بدن و بنابراین باعث تغییر state ابجکت مورد نظر بشن.
⭕️بنابراین در چنین شرایطی متدهای ابجکت مورد نظر side effect دارن.... چون باعث تغییر مقدار فیلد های ابجکت شدن..
⭕️بعضی مواقع دوست نداریم متدهای یه ابجکت side effect داشته باشن و مقدار فیلد ها رو تغییر بدن .
⭕️در چنین شرایطی:
🟢 کلیه فیلد های اون ابجکت باید غیر قابل تغییر بشن.. (final)
🟢متدهایی از ابجکت که قبلن void بودن و مقدار فیلد های ابجکت رو تغییر میدادن، از این به بعد باید یه instance جدید از اون ابجکت رو return کنن.
🟢ابجکت باید متد equality داشته باشه که براساس structural equality عمل میکنه و نه Reference Equality...
⭕️با اعمال سه شرط بالا ابجکت مورد نظر به یک ValueObject تبدیل میشه.
✅در نتیجه Value Object ها رو هیج موقع نمیتونیم آپدیت کنیم و اگه بخوایم یه Value Object با ویژگی های جدید داشته باشیم، به جای آپدیت کردن قبلی باید یه دونه از اول بسازیم .
✅این Value Object ها توی unit test نوشتن به خصوص خیلی بهمون کمک میکنن و میتونیم لاجیک های مهم برنامه رو داخلشون قرار بدیم و به دلیل اینکه side effect ندارن و state اشون تغییر نمیکنه، کاربرد های مفیدی رو بهمون میدن .
@purecoder_ir
⭕️هر ابجکتی یه سری فیلد داره و یک سری متد داره که یه بلاهایی سر اون فیلد ها میارن
⭕️این متد ها میتونن مقدار فیلد ها رو تغییر بدن و بنابراین باعث تغییر state ابجکت مورد نظر بشن.
⭕️بنابراین در چنین شرایطی متدهای ابجکت مورد نظر side effect دارن.... چون باعث تغییر مقدار فیلد های ابجکت شدن..
⭕️بعضی مواقع دوست نداریم متدهای یه ابجکت side effect داشته باشن و مقدار فیلد ها رو تغییر بدن .
⭕️در چنین شرایطی:
🟢 کلیه فیلد های اون ابجکت باید غیر قابل تغییر بشن.. (final)
🟢متدهایی از ابجکت که قبلن void بودن و مقدار فیلد های ابجکت رو تغییر میدادن، از این به بعد باید یه instance جدید از اون ابجکت رو return کنن.
🟢ابجکت باید متد equality داشته باشه که براساس structural equality عمل میکنه و نه Reference Equality...
⭕️با اعمال سه شرط بالا ابجکت مورد نظر به یک ValueObject تبدیل میشه.
✅در نتیجه Value Object ها رو هیج موقع نمیتونیم آپدیت کنیم و اگه بخوایم یه Value Object با ویژگی های جدید داشته باشیم، به جای آپدیت کردن قبلی باید یه دونه از اول بسازیم .
✅این Value Object ها توی unit test نوشتن به خصوص خیلی بهمون کمک میکنن و میتونیم لاجیک های مهم برنامه رو داخلشون قرار بدیم و به دلیل اینکه side effect ندارن و state اشون تغییر نمیکنه، کاربرد های مفیدی رو بهمون میدن .
@purecoder_ir