کدوم مورد از تست های زیر نسبت به بقیه قسمت بزرگتری از نرم افزار رو پوشش میده؟
Anonymous Quiz
35%
Unit test
41%
Integration test
24%
e2e test
کدوم مورد از تست های زیر نسبت به بقیه سرعت بالاتری دارن و سریعتر run میشن؟
Anonymous Quiz
80%
Unit test
8%
Integration test
12%
End to end test
کدوم مورد از تست های زیر نسبت به بقیه maintenance cost یا هزینه maintain کمتری دارن ؟
Anonymous Quiz
65%
Unit test
18%
Integration test
17%
End to end test
❓پترن
✅هر پترن یه problem ای رو بیان میکنه که بارها و بارها اتفاق افتاده و یه سولوشن براش ارائه میده .
❓آنتی پترن
✅هر آنتی پترن یه problem ای رو بیان میکنه که بارها و بارها اتفاق افتاده و یه سولوشن رو براش ارائه میده .
این سولوشن در ابتدا مناسب به نظر میرسه ولی خودش باعث problem های بیشتری میشه .
@purecoder_ir
✅هر پترن یه problem ای رو بیان میکنه که بارها و بارها اتفاق افتاده و یه سولوشن براش ارائه میده .
❓آنتی پترن
✅هر آنتی پترن یه problem ای رو بیان میکنه که بارها و بارها اتفاق افتاده و یه سولوشن رو براش ارائه میده .
این سولوشن در ابتدا مناسب به نظر میرسه ولی خودش باعث problem های بیشتری میشه .
@purecoder_ir
❓چالش
چرا توی معماری هایی مثل کلین میگیم که ورودی خروجی های Application Serivce ها یا usecase ها باید Data Transfer Object (دیتا استراکچر ) باشن و نباید Entity ها رو توی ورودی و خروجی سرویس ها استفاده کنیم. ولی در عین حال میتونیم Entity ها رو از طرف سرویس ها یا یوزکیس ها به Repository ها پاس بدیم و همچنین Repository ها هم میتونن Entity ریترن کنن؟
چرا ورودی و خروجی اونطرفشون باید دیتااستراکچر باشه و نباید Entity باشه ولی توی ارتباط با Repository ها مشکلی نداره Entity رد و بدل بشه؟
@purecoder_ir
چرا توی معماری هایی مثل کلین میگیم که ورودی خروجی های Application Serivce ها یا usecase ها باید Data Transfer Object (دیتا استراکچر ) باشن و نباید Entity ها رو توی ورودی و خروجی سرویس ها استفاده کنیم. ولی در عین حال میتونیم Entity ها رو از طرف سرویس ها یا یوزکیس ها به Repository ها پاس بدیم و همچنین Repository ها هم میتونن Entity ریترن کنن؟
چرا ورودی و خروجی اونطرفشون باید دیتااستراکچر باشه و نباید Entity باشه ولی توی ارتباط با Repository ها مشکلی نداره Entity رد و بدل بشه؟
@purecoder_ir
🔥DRY
🔥Don't Repeat Yourself
اصل DRY صراحتن در مورد code duplication صحبت نمیکنه و هر code duplication ای الزامن نقض اصل DRY نیست.
بعضی مواقع با Accidental Duplication روبرو میشیم.
ینی چی؟
یعنی دو قطعه کد کپی یا شبیه هم هستن و ما فکر میکنیم که DRY نقض شده و سعی میکنیم که با یکی کردن اونها duplication رو از بین ببریم .
ولی در واقعیت این یه duplication تصادفی بوده و به هیج وجه نباید اون دو قطعه کد یکسان سازی بشن.
برای همین میگیم که اصل DRY رو نباید در حد code duplication پایین بیاریم.
@purecoder_ir
🔥Don't Repeat Yourself
اصل DRY صراحتن در مورد code duplication صحبت نمیکنه و هر code duplication ای الزامن نقض اصل DRY نیست.
بعضی مواقع با Accidental Duplication روبرو میشیم.
ینی چی؟
یعنی دو قطعه کد کپی یا شبیه هم هستن و ما فکر میکنیم که DRY نقض شده و سعی میکنیم که با یکی کردن اونها duplication رو از بین ببریم .
ولی در واقعیت این یه duplication تصادفی بوده و به هیج وجه نباید اون دو قطعه کد یکسان سازی بشن.
برای همین میگیم که اصل DRY رو نباید در حد code duplication پایین بیاریم.
@purecoder_ir
🔥دیزاین پترن هایی که توی فریوورک فلاتر استفاده شدن و کاربردشون توی ذهنم هست....
✅Composite
✅Observer
✅Decorator
✅Proxy
✅Visitor
✅Chain of Responsibility
✅Factory Method
✅Template Method
✅Command
✅Momento
🔥البته این لیست بلند تر هست... ولی کاربرد بقیشون توی فلاتر الان توی ذهنم نیست...
شما تکمیل ترش کنید...
🔥فریمورک های خوب بهشت دیزاین پترن ها هستن😍😍
🔥برای مثال توی فلاتر ترکیب Composite با Visitor و همچنین ترکیب Composite با Chain of Responsibility رو میبینیم😍
@purecoder_ir
✅Composite
✅Observer
✅Decorator
✅Proxy
✅Visitor
✅Chain of Responsibility
✅Factory Method
✅Template Method
✅Command
✅Momento
🔥البته این لیست بلند تر هست... ولی کاربرد بقیشون توی فلاتر الان توی ذهنم نیست...
شما تکمیل ترش کنید...
🔥فریمورک های خوب بهشت دیزاین پترن ها هستن😍😍
🔥برای مثال توی فلاتر ترکیب Composite با Visitor و همچنین ترکیب Composite با Chain of Responsibility رو میبینیم😍
@purecoder_ir
فولدرهای تو در تو الزامن باعث بهتر شدن ساختار یا معماری آپ نمیشن
بعضی جاها باید ۱۰ تا فولدر( با اغراق ) باز کنی که برسی به کلاس هدف ....بعد اصن یادت میره کجا بودی!!!!
یه کلاس میخوای اضافه کنی، باید ۱ ساعت توی این فولدرها بگردی که ببینی دقیقن کجا باید اضافه بشه ...
این موضوع رو خیلی زیاد جاهای مختلف دیدم، چه پروژه های فلاتری و چه ...
به پیر به پیغمبر این ساختار بندی ها، خودشون هدف نیستن، هدف توسعه ی پایدار آپ هست و تعداد فولدرهای زیاد و تودرتو الزامن نشون دهنده ی یه ساختار کلین نیست .
Simple, simple, simple
شما اگه بخواین از تهران برید مشهد، باید مسیر مستقیم رو برید ....گرمسار، سمنان، دامغان، شاهرود، سبزوار.....
اگه به جای مسیر مستقیم انداختی توی اتوبان تهران قم، با این استدلال که جادش بهتره نشونه ی بی عقلیه، چون هدف رو فراموش کردید!!!!
پ.ن: در ضمن، شما توی مراحل مختلف میتونی ساختار اپت رو تغییر بدی و الزامی نداره به یه چیزی پایبند باشی که از ابتدای کار خودت رو گرفتار ساختارهای توهمی کنی که نکنه در آینده به مشکل بخورم
@purecoder_ir
بعضی جاها باید ۱۰ تا فولدر( با اغراق ) باز کنی که برسی به کلاس هدف ....بعد اصن یادت میره کجا بودی!!!!
یه کلاس میخوای اضافه کنی، باید ۱ ساعت توی این فولدرها بگردی که ببینی دقیقن کجا باید اضافه بشه ...
این موضوع رو خیلی زیاد جاهای مختلف دیدم، چه پروژه های فلاتری و چه ...
به پیر به پیغمبر این ساختار بندی ها، خودشون هدف نیستن، هدف توسعه ی پایدار آپ هست و تعداد فولدرهای زیاد و تودرتو الزامن نشون دهنده ی یه ساختار کلین نیست .
Simple, simple, simple
شما اگه بخواین از تهران برید مشهد، باید مسیر مستقیم رو برید ....گرمسار، سمنان، دامغان، شاهرود، سبزوار.....
اگه به جای مسیر مستقیم انداختی توی اتوبان تهران قم، با این استدلال که جادش بهتره نشونه ی بی عقلیه، چون هدف رو فراموش کردید!!!!
پ.ن: در ضمن، شما توی مراحل مختلف میتونی ساختار اپت رو تغییر بدی و الزامی نداره به یه چیزی پایبند باشی که از ابتدای کار خودت رو گرفتار ساختارهای توهمی کنی که نکنه در آینده به مشکل بخورم
@purecoder_ir
🔥Http Methods
✅توی در خواست های post میتونید به جای استاتوس کد ۲۰۰ از استاتوس کد ۲۰۱ استفاده کنید و لینک ریسورسی که توسط این درخواست ساخته شده رو توی هدر رسپانس بذارید
✅توی درخواست هایی که نمیخواین body ارسال کنید، میتونید از ۲۰۴ به جای ۲۰۰ استفاده کنید .
✅ارورهایی که از طرف کلاینت اتفاق افتاده و کلاینت باید یه چیزی رو اصلاح کنه و دوباره درخواست بده رو با 4xx گزارش کنید
✅ارورهایی که از سمت سرور اتفاق افتاده و ارتباطی با کلاینت نداره، برای مثال مشکل در کانکشن زدن با دیتابیس رو با 5xx گزارش کنید
✅در ارور های 5xx دل و روده ی خطا رو بیرون نریزید و دو حالت development و production رو برای ارائه کردن یا نکردن جزئیات خطا در نظر بگیرید .
@purecoder_ir
✅توی در خواست های post میتونید به جای استاتوس کد ۲۰۰ از استاتوس کد ۲۰۱ استفاده کنید و لینک ریسورسی که توسط این درخواست ساخته شده رو توی هدر رسپانس بذارید
✅توی درخواست هایی که نمیخواین body ارسال کنید، میتونید از ۲۰۴ به جای ۲۰۰ استفاده کنید .
✅ارورهایی که از طرف کلاینت اتفاق افتاده و کلاینت باید یه چیزی رو اصلاح کنه و دوباره درخواست بده رو با 4xx گزارش کنید
✅ارورهایی که از سمت سرور اتفاق افتاده و ارتباطی با کلاینت نداره، برای مثال مشکل در کانکشن زدن با دیتابیس رو با 5xx گزارش کنید
✅در ارور های 5xx دل و روده ی خطا رو بیرون نریزید و دو حالت development و production رو برای ارائه کردن یا نکردن جزئیات خطا در نظر بگیرید .
@purecoder_ir
Pure Coder
🔥Http Methods ✅توی در خواست های post میتونید به جای استاتوس کد ۲۰۰ از استاتوس کد ۲۰۱ استفاده کنید و لینک ریسورسی که توسط این درخواست ساخته شده رو توی هدر رسپانس بذارید ✅توی درخواست هایی که نمیخواین body ارسال کنید، میتونید از ۲۰۴ به جای ۲۰۰ استفاده کنید…
🤦♂🤦♂بعضیا هستن که گل درخواست ها رو با post مینويسن و وقتی دلیل میپرسی میگن به خاطر امنیت بیشتر ...
اگر فرانت کار بودید و با چنین موجودات عجیبی سمت بکند روبرو شدید، به هیچ وجه زیر بار نرید..
هر کدوم اینها جایگاه خودشون رو دارن
✅معمولن get و post و put و delete رایج تر از بقیه هستن.
✅اگه درخواستتون فقط شامل query زدن هست و چیزی رو توی دیتابیس تغییر نمیده از get استفاده کنید .
✅اگه درخواستتون یه command هست و قراره یه تغییری توی دیتابیس اعمال کنه، بسته به نیاز از post یا put یا delete استفاده کنید
❌به هیچ عنوان اینها رو باهم قاطی نکنید
@purecoder_ir
اگر فرانت کار بودید و با چنین موجودات عجیبی سمت بکند روبرو شدید، به هیچ وجه زیر بار نرید..
هر کدوم اینها جایگاه خودشون رو دارن
✅معمولن get و post و put و delete رایج تر از بقیه هستن.
✅اگه درخواستتون فقط شامل query زدن هست و چیزی رو توی دیتابیس تغییر نمیده از get استفاده کنید .
✅اگه درخواستتون یه command هست و قراره یه تغییری توی دیتابیس اعمال کنه، بسته به نیاز از post یا put یا delete استفاده کنید
❌به هیچ عنوان اینها رو باهم قاطی نکنید
@purecoder_ir
نباید هدف یا goal
❌ استفاده از یه معماری خاص و تو دل برو برای پروژه باشه
❌رعایت مو به موی اصول سالید باشه
❌تست کردن واو به واو کدها و گرفتن code coverage صد در صد باشه
❌استفاده از یه سری دیزاین پترن خاص باشه
❌و...
هدف یا goal باید
✅توسعه ی پایدار اپلیکیشن باشه
❓آیا کارهایی که داری انجام میدی به این هدف کمک میکنه؟
اگه کمک نمیکنه پس داری مسیر اشتباهی رو میری، معماری، دیزاین پترن ها و .... هدف نیستن، بلکه وسیله ای برای رسیدن به هدف هستن.
ما بعضی وقت ها هدف رو فراموش میکنیم و خود این موارد رو هدف یا goal نهایی قرار میدیم.
این خطرناکه...
@purecoder_ir
❌ استفاده از یه معماری خاص و تو دل برو برای پروژه باشه
❌رعایت مو به موی اصول سالید باشه
❌تست کردن واو به واو کدها و گرفتن code coverage صد در صد باشه
❌استفاده از یه سری دیزاین پترن خاص باشه
❌و...
هدف یا goal باید
✅توسعه ی پایدار اپلیکیشن باشه
❓آیا کارهایی که داری انجام میدی به این هدف کمک میکنه؟
اگه کمک نمیکنه پس داری مسیر اشتباهی رو میری، معماری، دیزاین پترن ها و .... هدف نیستن، بلکه وسیله ای برای رسیدن به هدف هستن.
ما بعضی وقت ها هدف رو فراموش میکنیم و خود این موارد رو هدف یا goal نهایی قرار میدیم.
این خطرناکه...
@purecoder_ir
چرا بعضی برنامه نویس ها فکر میکنن که وقتی لینوکس نصب کنن کلاس کارشون میره بالا؟
اگه استفاده ی تخصصی از لینوکس کنی درست ...
یا اگه علاقه به یادگیری لینوکس داری بازم درست ...
ولی وقتی کل کاری که میکنی اینه که یه کروم باز میکنی و یه ide که توش کد بزنی چه فرقی بین لینوکس و ویندوز هست ؟
حالا بگیم لینوکس مصرف منابعش بهتره ولی ویندوزم که دیگه ژیان نیست، یه سیستم معمولی داشته باشی باهات راه میاد، کلی دردسر هایی هم که توی لینوکس داری و کلی سر کله زدن با درایور ها رو نداری ...
اگه استفاده ی تخصصی از لینوکس کنی درست ...
یا اگه علاقه به یادگیری لینوکس داری بازم درست ...
ولی وقتی کل کاری که میکنی اینه که یه کروم باز میکنی و یه ide که توش کد بزنی چه فرقی بین لینوکس و ویندوز هست ؟
حالا بگیم لینوکس مصرف منابعش بهتره ولی ویندوزم که دیگه ژیان نیست، یه سیستم معمولی داشته باشی باهات راه میاد، کلی دردسر هایی هم که توی لینوکس داری و کلی سر کله زدن با درایور ها رو نداری ...
انسان ها ابتدا غار نشین بودن و ....
این ها کم کم شروع کردن به تجربه کردن چیزهای مختلف
تفاوت انسان با سایر موجودات این بود که انسان تجربیات خودش رو داکیومنت میکرد تا نسل های بعدی بتونن ازش استفاده کنن
ابن داکیومنت کردن اول انتقال سینه به سینه بود، بعد یاد گرفتن که مکتوبش کنن و بعد ها روش های دیگه ی مستند سازی رو هم ابداع کردن ...
این تجربیات داکیومنت شده همون علم هستن
حالا نسل های بعدی نیاز نبود از ابتدا شروع به تجربه گردن کنن و علومی که انسان های پیشین به جا گذاشته بودن رو فرا میگرفتن و این راه رو ادامه میدادن
و همین عامل موثر و کلید پیشرفت آنسان شد
حالا برنامه نویسی هم از این قاعده مستثنا نیست
این جا برنامه نویس های قبلی تجربیات خودشون رو داکیومنت کردن (علم)
وقتی اینارو یاد نمیگیری و میگی میرم توی گد و هر چی نیازم شد یاد میگیرم و میرم جلو مثل اینه که انسان ها از ابتدا به تجربیات پیشینیان خودشون توجه نمیکردن ...
چی میشد؟
آیا این همه پیشرفت حاصل میشد ؟
برنامه نویسی همش این نیست که کد بزنی
حداقل ۵۰ درصدش علمه
و وقتی میگیم علم یعنی اینکه باید بری ببینی که پیشینیان چی به جا گذاشتن ...
این کار یه کار آکادمیک هست و صرفن با کد زدن حاصل نمیشه...
کد زدن مهمه، خیلی خیلی مهمه، تمرین و کار عملی مهمه، ولی هرچیزی به جای خودش
کار عملی که پشتوانه ی علمی نداشته باشه میشه تولید پراید
@purecoder_ir
این ها کم کم شروع کردن به تجربه کردن چیزهای مختلف
تفاوت انسان با سایر موجودات این بود که انسان تجربیات خودش رو داکیومنت میکرد تا نسل های بعدی بتونن ازش استفاده کنن
ابن داکیومنت کردن اول انتقال سینه به سینه بود، بعد یاد گرفتن که مکتوبش کنن و بعد ها روش های دیگه ی مستند سازی رو هم ابداع کردن ...
این تجربیات داکیومنت شده همون علم هستن
حالا نسل های بعدی نیاز نبود از ابتدا شروع به تجربه گردن کنن و علومی که انسان های پیشین به جا گذاشته بودن رو فرا میگرفتن و این راه رو ادامه میدادن
و همین عامل موثر و کلید پیشرفت آنسان شد
حالا برنامه نویسی هم از این قاعده مستثنا نیست
این جا برنامه نویس های قبلی تجربیات خودشون رو داکیومنت کردن (علم)
وقتی اینارو یاد نمیگیری و میگی میرم توی گد و هر چی نیازم شد یاد میگیرم و میرم جلو مثل اینه که انسان ها از ابتدا به تجربیات پیشینیان خودشون توجه نمیکردن ...
چی میشد؟
آیا این همه پیشرفت حاصل میشد ؟
برنامه نویسی همش این نیست که کد بزنی
حداقل ۵۰ درصدش علمه
و وقتی میگیم علم یعنی اینکه باید بری ببینی که پیشینیان چی به جا گذاشتن ...
این کار یه کار آکادمیک هست و صرفن با کد زدن حاصل نمیشه...
کد زدن مهمه، خیلی خیلی مهمه، تمرین و کار عملی مهمه، ولی هرچیزی به جای خودش
کار عملی که پشتوانه ی علمی نداشته باشه میشه تولید پراید
@purecoder_ir
🔥Test and Design
🤝تست با کیفیت و دیزاین خوب دست در دست هم دیگه هستن.
✅اگه یه دیزاین خوب نداشته باشی، نمیتونی تست های باکیفیت بنویسی و بیشتر وقتی که برای نوشتن تست ها صرف میکنیهدر میره .
✅اگه یه دیزاین خوب داشته باشی ولی تست ننویسی و یا تست های باکیفیت ننویسی، هیچ تضمینی وجود نداره که بتونی دیزاین خوبت رو در طول زمان حفظ کنی.
@purecoder_ir
🤝تست با کیفیت و دیزاین خوب دست در دست هم دیگه هستن.
✅اگه یه دیزاین خوب نداشته باشی، نمیتونی تست های باکیفیت بنویسی و بیشتر وقتی که برای نوشتن تست ها صرف میکنیهدر میره .
✅اگه یه دیزاین خوب داشته باشی ولی تست ننویسی و یا تست های باکیفیت ننویسی، هیچ تضمینی وجود نداره که بتونی دیزاین خوبت رو در طول زمان حفظ کنی.
@purecoder_ir
🔥Smalltalk
فرص کنید یه کلاس int دارین و یه var به نام x داریم که از جنس int هست
حالا فرض کنید یه متد به اسم isBetween توی کلاس int داری که دو تا ورودی میگیره و مشخص میکنه که ایا x بین اون دو تا ورودی هست یا نه
bool isBetween(int min, int max)
و اینجوری ازش استفاده میکنیم
var c = x.IsBetween(a, b);
که مشخص میکنه ایا x بین a و b هست یا نه؟
تا اینجا همه چی واضحه...
توی زبان smalltalk اگه بخوایم چنین چیزی داشته باشیم، سینتکسش به اینصورت میشه
c := x isBetween: a and: b
خیلی باحاله😁😁😁
تمام متدها توی smalltalk این مدلین
یعنی اسم یه متد تیکه تیکه میشه و ارگومنت ها بینش قرار میگیرن
اینجا متدمون
isBetween:and:
هست و ارگومنت ها بین این تیکه ها قرار میگیرن
🔥زبان smalltalk یه زبان داینامیک تایپ هست و یه جورایی مادر object oriented هست .
@purecoder_ir
فرص کنید یه کلاس int دارین و یه var به نام x داریم که از جنس int هست
حالا فرض کنید یه متد به اسم isBetween توی کلاس int داری که دو تا ورودی میگیره و مشخص میکنه که ایا x بین اون دو تا ورودی هست یا نه
bool isBetween(int min, int max)
و اینجوری ازش استفاده میکنیم
var c = x.IsBetween(a, b);
که مشخص میکنه ایا x بین a و b هست یا نه؟
تا اینجا همه چی واضحه...
توی زبان smalltalk اگه بخوایم چنین چیزی داشته باشیم، سینتکسش به اینصورت میشه
c := x isBetween: a and: b
خیلی باحاله😁😁😁
تمام متدها توی smalltalk این مدلین
یعنی اسم یه متد تیکه تیکه میشه و ارگومنت ها بینش قرار میگیرن
اینجا متدمون
isBetween:and:
هست و ارگومنت ها بین این تیکه ها قرار میگیرن
🔥زبان smalltalk یه زبان داینامیک تایپ هست و یه جورایی مادر object oriented هست .
@purecoder_ir
Forwarded from آموزش فلاتر و دارت
سلام دوستان عزیز که علاقمند به بکند هستند و دوست دارند فریم ورک وانیا رو استفاده کنند میتونند در کانال و گروه پرسش پاسخ عضو بشند
کانال اخبار و بروز رسانی های فریم ورک وانیا
https://t.me/vaniadart
گروه پرسش و پاسخ و پشتیبانی
https://t.me/VDartDev
کانال اخبار و بروز رسانی های فریم ورک وانیا
https://t.me/vaniadart
گروه پرسش و پاسخ و پشتیبانی
https://t.me/VDartDev