دوره الگوهای طراحی حرفه ای TypeScript سون لرن
محتوای این دوره، شامل ویدئوها، فایلهای پیوست، پروژهها و یادداشتها، با هدف یادگیری سریعتر و مؤثرتر طراحی شدهاند. تمامی دوره های رایگان کده بهصورت رایگان و همچنین از طریق خرید اشتراکی در دسترس بوده و سعی شده همواره تمامی دوره ها بدون قفل و دارای آخرین آپدیت باشند. دوره ها فقط از سمت ربات تلگرامی رایگان کده قابل دانلود هستند.
دوره الگوهای طراحی حرفه ای TypeScript سون لرن
محتوای این دوره، شامل ویدئوها، فایلهای پیوست، پروژهها و یادداشتها، با هدف یادگیری سریعتر و مؤثرتر طراحی شدهاند. تمامی دوره های رایگان کده بهصورت رایگان و همچنین از طریق خرید اشتراکی در دسترس بوده و سعی شده همواره تمامی دوره ها بدون قفل و دارای آخرین آپدیت باشند.
این دوره تا آخرین پارت منتشر شده از سوی سازنده (وبینار نقشه راه مهندسی نرم افزار) قرار گرفته است!
این دوره بدون هیچ لایسنس و قفل نرمافزاری با فرمت MP4 قرار گرفته است!
الگوهای طراحی چیه؟
بیاید با این سوال شروع کنیم؟ آیا برنامه نویسی چیزی جز حل مساله هست؟ قطعا نه .الگوریتم،ساختمان داده،معماری و . همه و همه اینجا هستن تا ما به عنوان یک برنامه نویس یک مسئله رو حل کنیم. حل مساله اولین و مهمترین مهارت یک برنامه نویس محسوب میشه. در برنامه نویسی شما یه ابزار به اسم زبان برنامه نویسی داری که باید با استفاده از امکاناتی که در اختیار شما قرار میده مسئله رو حل کنید.
خب میرسیم به این سوال که آیا برای یک مسئله راه حلهای مختلفی میتواند وجود داشته باشه؟ قطعا بله. قطعا برای هر مسئله ای هم راه حلهای ساده وجود دارد و هم راه حلهای پیچیده و این مورد در دنیای برنامه نویسی هم صدق میکنه.
سوال بعدی که میتوانیم مطرح کنیم این است که بهترین روش حل مسئله کدام است؟ بدون شک سادهترین روش حل مسئله بهترین روش حل مسئله هست و ما همیشه باید در نظر داشته باشیم مهمترین چیز در توسعه نرم افزار قابلیت نگهداری نرم افزار یا Maintainability هست. پس باید بدونیم که باید بهترین روش حل مساله اونی هست که سادهترین روش باشه و به قابلیت نگهداری نرم افزار کمک کنه.
Maintainability بالای یک نرم افزار کمک میکنه باگهای اون زودتر شناخته بشن، عملکرد خیلی بهتری داشته باشه و در نهایت نیازهای کسب و کار رو در زمان خیلی کمتری تغییر بده یا اونها رو ایجاد کنه. تمامی اصول توسعه نرم افزار برای این هستن که ما به عنوان برنامه نویس بتونیم نرم افزاری ایجاد کنیم که قابلیت نگهداری بالایی داشته باشه.
الگوهای طراحی به عنوان Best Practiceهای حل مساله در دنیای کدنویسی شناخته میشن و روش هایی هستن که در نهایت کمک میکنن ما یک نرم افزار با قابلیت نگهداری بالا داشته باشیم. الگوهای طراحی، اختراع (invent) یا ساخته نشدن بلکه به مرور زمان توسط برنامه نویسهای مختلف کشف (discover) شدن و به صورت یک سری قاعده abstract معرفی شدن که در مسائل مختلفی میشه ازشون استفاده کرد.
شاید براتون سوال باشه چرا بهشون الگوی طراحی گفته میشه؟
ما در برنامه نویسی بحث طراحی ساختار کدها رو هم داریم. طراحیهای مختلف تعیین میکنن بخشهای مختلف نرم افزار ما چطوری با هم کار کنن و کیفیت اون چه شکلی باشه. هر چقدر این طراحی بهتر انجام بشه ما یک نرم افزار با قابلیت نگهداری بالاتر خواهیم داشت و هر چقدر ضعیفتر باشه، نرم افزاری خواهیم داشت که دردسرهای توسعه اون به قدری میره بالا که اکثر صاحبان کسب و کار ترجیح میدن اون رو از اول بنویسن (حلقه بی نهایت توسعه از اول) و بارها و بارها هزینههای مجدد بابت اون پرداخت کنن.
طراحی ضعیف در کدها علاوه بر هزینه هایی که برای خود صاحبان کسب و کار در دراز مدت ایجاد میکنه، میل و رغبت برنامه نویسان برای توسعه کد رو هم به شدت کاهش میده. همین خود شما قطعا کدهایی قبلا نوشتی که الان اصلا تمایل نداری بهشون حتی نزدیک بشی.
در نهایت هر برنامه نویسی که به دانش الگوهای طراحی مجهز بشه قطعا از کسانی که این مورد رو بلد نیستن به شدت جلو میفته و میتونه مسائل مختلفی رو حل کنه، اونم نه فقط حل کردن ساده، بلکه یک حل کردن با طراحی کد خوب و تمیز.
چرا الگوهای طراحی مهمه؟
تا حالا به این مورد فکر کردین چرا خیلیا نمیتونن از شی گرایی درست استفاده کنن؟
خیلیا نمیتونن از شی گرایی به صورت درست استفاده کنن و در نهایت با سوالاتی مثل این که اصلا شی گرایی به چه دردی میخوره و چرا باید کدی که با توابع میتونیم بنویسیم و در داخل چیزی به اسم کلاس قرار بدیم از شی گرایی ناامید میشن.
شما برای اینکه بتونید با شی گرایی کد خوب بنویسید باید بدونید چطوری در دنیای واقعی نرم افزار کدها رو کنار هم قرار بدید. بین کلاسها رابطه ایجاد کنید. براشون قرارداد بنویسید و حد و حدودش رو رعایت کنید
یکی از بهترین روشهای یادگیری و تمرین مباحث شی گرایی استفاد از الگوهای طراحی هست. الگوهای طراحی با قابلیت انتزاعی بودنشون کمک میکنن مفاهیم شی گرایی رو بهتر و با کیفیت بیشتری درک کنید و در نتیجه هم کدهای بهتری بنویسید و هم از نتیجه کدهاتون راضی باشید.
یکی از بهترین لذتهای دنیای کدنویسی این هست که کدهای شما مشکلی برای دیگران ایجاد نکن، دیگران به راحتی اونارو بخونن و بتونن توسعه بدن و نگهداریشون هم با کمترین هزینه قابل انجام باشه. اگر بتونید به این مرحله برسید، بیشترین لذت رو از کد نویسی میبرید.
اکثر شرکتهای خارجی و داخلی و مخصوصا اونایی که محصولشون بر اساس زبانهای شی گرایی ساخته شده به الگوهای طراحی اهمیت زیادی میدن،چون براشون مهمه که کدی که نوشته میشه کیفیت لازم و کافی رو داشته باشه.
چطوری باید الگوهای طراحی رو یاد بگیریم؟
مهمترین چالشی که هر برنامه نویسی با الگوهای طراحی داره بحث استفاده از اون هست. ممکنه یک نفر از لحاظ تئوری واقعا خوب یاد بگیره اما بازم در استفاده کردن در کدهای واقعی، باهاش مشکل داشته باشه و این چیزیه که خود من به شدت باهاش دست و پنجه نرم کردم.
شما میری و در منابع مختلف بر اساس دسته بندیهای مختلف اونارو میخونی و حتی نمونه کدهای اونارو بررسی میکنی و فکر میکنی الان دیگه واقعا یاد گرفتی، اما وقتی به کد اصلی خودت میرسی، هیچ ایده ای نداری که چطوری باید ازشون استفاده کنی.
مهمترین نکته ای که به خود من کمک کرد الگوهای طراحی رو یاد بگیرم و توی ذهن خودم یک سری قوانین تعیین کنم و بر اساس اون قوانین تشخیص بدم کجا از چه الگوی طراحی استفاده کنم، تمرین مسائل و سر و کله زیاد با اونها بود و شما هم قطعا باید همین مسیر رو بری تا اینها ملکه ذهن شما بشن و در مسائل مختلف به کمک شما بیان.
چرا باید چند مثال و اونم مثالهای واقعی برای هر الگو رو بررسی کنیم؟
خب واقعیت ماجرا اینه که مثال هایی که در اکثر جاها استفاده میشه،بر اساس مسائل صرفا تئوری و کار با موجودیت هایی مثل Car,Book,Animal,Human پیاده سازی شده و به ندرت در نرم افزارهای دنیای واقعی استفاده میشه و به خاطر همین موضوع باید مثال هایی از دنیای واقعی مطرح بشه.
مثلا باید در مورد سبد خرید،لاگ گرفتن، روشهای پرداخت،روش ارسال پیام، روشهای جمع آوری داده و … صحبت و مسائلی از این جنس مطرح کنیم که شما قطعا در برنامههای واقعی باهاش روبرو خواهید شد و در نهایت هم برای هر مسئله راه حلی مبتنی بر الگوهای طراحی مطرح کنیم.
آیا این دوره به درد من میخوره؟
- اگر تازه یک زبان برنامه نویسی شی گرا مثل PHP,Java,TypeScript یاد گرفتی و میخوای یاد بگیری در مراحل پیشرفتهتر چطوری باید مسائل رو حل کنی، قطعا این دوره بهت کمک میکنه خیلی راحتتر به هدفت برسی.
- بدون شک یکی از مباحث اصلی مصاحبههای استخدامی و سوالات اون برای یک برنامه نویس، بحث الگوهای طراحی محسوب میشه، پس اگر مصاحبه استخدامی و سوالات فنی اون برات یک دغدغه هست قطعا این دوره میتونه بهت کمک کنه.
- افزایش مهارت فنی،یکی از راه هایی هست که برنامه نویس میتونه بر اساس اون درخواست افزایش حقوق بده، خب اگر تازه مثلا ۶ ماه بیشتر هست که مشغول به کار شدی و تمایل داری حقوقت افزایش پیدا کنه میتونی بر
- اساس مهارت در الگوهای طراحی که منجر به کدنویسی بهتر میشه درخواست افزایش حقوق بدی.
- اگر تمایل داری وارد پروژههای سازمانی بشی و میخوای درک بهتری از شی گرایی داشته باشی،قطعا این دوره کمکت میکنه از یک زاویه دیگه به شی گرایی نگاه کنی.
آیا این دوره با این قیمت واقعا ارزشش رو داره؟
الان میتونیم بگیم یک توسعه دهنده Junior یه حقوقی بین رنج ۴ الی ۶ میلیون تومن درآمد داره و یه توسعه دهنده Mid-Level بین ۸ الی ۱۲ تومن و در نهایت یک توسعه دهنده Senior از ۱۲ الی ۲۵ تومن حقوق دریافت میکنه.
شما با این دوره شانس این رو به دست میارید که یک پرش خوب در موقعیت شغلی خودتون ایجاد کنید، با یادگیری این الگوها و پیاده سازی واقعی اونها میتونید از شرکت خودتون درخواست افزایش حقوق یا درخواست ارتقای شغلی داشته باشید، پس میتونید با یک حساب سرانگشتی متوجه بشید که این دوره ارزش زیادی از این لحاظ برای شما ایجاد میکنه.
همون طور که قبلا هم گفتم، الگوهای طراحی مفاهیم سخت و انتزاعی هستن که باید مدت زیادی رو براشون وقت بذارید، این دوره به شما کمک میکنه این مدت زمان طولانی شاید چندین ساله رو به ۳ ماه کمپرس و فشرده کنید و این یعنی شما از خیلی از هم ردههای خودتون میتونید جلوتر باشید. البته بازم تاکید میکنم قرار نیست معجزه کنیم و حتما حتما به تلاش و تمرین خودتون خیلی خیلی احتیاج داره.
در خیلی از مصاحبههای استخدامی داخلی و خارجی از این موضوع سوال پرسیده میشه و تسلط به این آیتمها میتونه شانس شما رو برای قبولی در استخدام افزایش بده.
- آماده سازی محیط توسعه
- نصب پکیجها و ایجاد ساختار پروژه
- نصب ESLint و Express
- اصل Tell, Don\’t Ask
- اصل YAGNI
- اصول SOLID – مفهوم Single Responsibility
- بررسی یک مثال SRP
- رفع مشکل نقض SRP
- اصول SOLID – مفهوم Open Closed
- بررسی مثال OCP
- رفع مشکل نقض OCP
- اصول SOLID – مفهوم Liskov Substitution
- بررسی مثال اول نقض LSP
- بررسی مثال دوم نقض LSP
- بررسی مثال سوم نقض LSP
- بررسی مثال چهارم نقض LSP
- اصول SOLID – مفهوم Interface Segregation
- بررسی مثال نقض ISP
- اصول SOLID – مفهوم Dependency Inversion
- بررسی مثال اول DIP
- بررسی مثال دوم DIP
- مفهوم الگوی طراحی Factory Method
- مثال اول Factory Method
- مثال دوم Factory Method
- مثال سوم Factory Method
- مفهوم الگوی طراحی Abstract Factory
- مثال اول الگوی طراحی Abstract Factory
- مثال دوم الگوی طراحی Abstract Factory
- تمرین الگوی طراحی Abstract Factory
- مفهوم الگوی طراحی Builder
- مثال اول الگوی طراحی Builder
- مثال دوم الگوی طراحی Builder
- مثال سوم الگوی طراحی Builder
- مفهوم الگوی طراحی Adapter
- مثال اول الگوی طراحی Adapter
- مثال دوم الگوی طراحی Adapter
- مثال سوم الگوی طراحی Adapter
- مفهوم الگوی طراحی Bridge
- مثال اول الگوی طراحی Bridge
- مثال دوم الگوی طراحی Bridge
- مثال سوم و تمرین الگوی طراحی Bridge
- مفهوم الگوی طراحی Composite
- مثال اول الگوی طراحی Composite
- مثال دوم الگوی طراحی Composite
- مثال سوم از الگوی طراحی Composite
- تمرین الگوی طراحی Composite
- مفهوم الگوی طراحی Decorator
- مثال اول الگوی طراحی Decorator
- مثال دوم الگوی طراحی Decorator
- مثال سوم و تمرین الگوی طراحی Decorator
- مفهوم الگوی طراحی Facade
- مثال اول الگوی طراحی Facade
- مثال دوم الگوی طراحی Facade
- مثال سوم و تمرین الگوی طراحی Facade
- مفهوم الگوی طراحی Proxy
- مثال اول الگوی طراحی Proxy
- مثال دوم الگوی طراحی Proxy
- مثال سوم و تمرین الگوی طراحی Proxy
- مفهوم الگوی طراحی FlyWeight
- مثال اول الگوی طراحی FlyWeight
- مثال دوم الگوی طراحی FlyWeight
- مثال سوم و تمرین الگوی طراحی FlyWeight
- وبینار پرسش و پاسخ
- مفهوم الگوی Chain of Responsibility
- مثال اول الگوی طراحی COR
- مثال دوم الگوی طراحی COR
- مثال سوم و تمرین الگوی طراحی COR
- مفهوم الگوی طراحی Command
- مثال اول الگوی طراحی Command
- مثال دوم الگوی طراحی Command
- مثال سوم و تمرین الگوی طراحی Command
- مفهوم الگوی طراحی Observer
- مثال اول الگوی طراحی Observer
- مثال دوم الگوی طراحی Observer
- مفهوم الگوی طراحی State
- مثال اول الگوی طراحی State
- مثال دوم الگوی طراحی State
- مثال سوم و تمرین الگوی طراحی State
- مفهوم الگوی طراحی Strategy
- مثال اول الگوی طراحی Strategy
- مثال دوم الگوی طراحی Strategy
- مثال و تمرین الگوی طراحی Strategy
- مفهوم الگوی طراحی Template Method
- مثال اول الگوی طراحی Template Method
- مثال دوم الگوی طراحی Template Method
- مثال سوم و تمرین الگوی طراحی Template Method
- مفهوم الگوی طراحی Visitor
- مثال Abstract از الگوی طراحی Visitor
- مثال دوم از الگوی طراحی Visitor
- مثال سوم از الگوی طراحی Visitor
- مهفوم الگوی طراحی Mediator
- مثال اول الگوی طراحی Mediator
- مثال دوم الگوی طراحی Mediator
- تمرین الگوی طراحی Mediator
- وبینار نقشه راه مهندسی نرم افزار
- این دوره مناسب چه کسانی است؟
- برنامهنویسانی که میخواهند مهارتهای الگوهای طراحی را با استفاده از TypeScript بهبود دهند.
- افرادی که میخواهند از الگوهای طراحی معتبر و حرفهای در توسعه نرمافزار خود استفاده کنند.
- فردی که میخواهد بهترین روشها و الگوهای طراحی را برای پروژههای خود انتخاب کند.
- این دوره مناسب چه کسانی نیست؟
- افرادی که قصد یادگیری TypeScript را ندارند و فقط به الگوهای طراحی علاقهمند هستند.
- برنامهنویسانی که تازهکار هستند و تجربه کمی در برنامهنویسی دارند، زیرا ممکن است سطح دوره برای آنها چندان مناسب نباشد.
- افرادی که قصد توسعه نرمافزار با استفاده از زبانهای دیگر به جز TypeScript را دارند.
قبل از شروع آموزش دیزاین پترنها باید یکی از زبانهای برنامه نویسی شی گرایی را بلد باشید. البته الزاما الگوهای طراحی در زبانهای شی گرا استفاده نمیشود در زبان هایی که شی گرا نیستند (زبانهای functional) هم استفاده میشوند.
یادگیری الگوهای طراحی برای هر کسی که در حوزه نرم افزار کار میکند ضروری است. شما با یادگیری الگوهای طراحی، حل مسئله به روش مناسب را یاد میگیرید تا کدهای بهتری بنویسید. در نهایت نوشتن کدهای بهتر باعث افزایش کیفیت نرم افزار میشود. در واقع اگر تسلط کافی در دیزاین پترنها داشته باشید موقعیت شغلی بهتری به دست میآورید و درآمد بیشتری هم خواهید داشت.
یادگیری دیزاین پترنها برای افرادی که در حوزه توسعه نرم افزار کار میکند مناسب است. مهم نیست که شما در چه پارادایمی (functional یا object oriented) کار میکنید. تسلط بر الگوهای طراحی باعث میشود بتوانید کدهای بهتری را طراحی کنید. کدهایی که قابلیت تست پذیری، خوانایی، توسعه پذیری، نگه داری بالاتری دارند. و قطعا افرادی که به الگوهای طراحی مسلط هستند موقعیتهای شغلی و درآمد بهتری دارند.
در دنیای نرم افزار برای حل مسئله روشهای زیادی وجود دارد. ما باید روشی را برای حل مسئله انتخاب کنیم که به maintainability نرم افزار کمک کند، خوانایی و تست پذیری را بالا ببرد، قابلیت توسعه پذیری داشته باشد. الگوهای طراحی روشهایی استاندارد برای حل مسئله است که کمک میکند نرم افزاری تولید شود که maintainable باشد. و این موضوع مزایای زیادی برای نرم افزار ایجاد میکند.
در دنیای توسعه نرم افزار ما به عنوان برنامه نویس با مسائل مختلفی مواجهیم که باید برای این مسائل راه حل پیدا کنیم. اما اکثرا این مسائل قبلا توسط برنامه نویسهای دیگری شناسایی شدهاند و راه حلی برای آنها ارائه شده است. در واقع الگوهای طراحی راهی برای حل این مسائل است.
الگوهای طراحی سه دسته اصلی دارند:
Creational patterns: معمولا راه حل هایی برای ایجاد کردن آبجکتها (objects) ارائه میدهند. تا کدهایی داشته باشیم که قابلیت reuse داشته باشد.
Structural patterns: کمک میکنند ساختارهای بزرگتری ایجاد کنیم در حالی که انعطاف پذیری و بهینه بودن حفظ شود.
Behavioral patterns: این دسته به الگوریتمها و نحوه انجام کار و responsibility بین آبجکتها مرتبط است و زا این طریق به حل مسئله کمک میکند.
همان طور که میدانید زبان تایپ اسکریپت کاربرد زیادی دارد و در پروژههای بزرگ زیاد استفاده میشود. پس تمام افرادی که در سمت فرانت اند و بک اند از تایپ اسکریپت استفاده میکنند باید به الگوهای طراحی مسلط باشند. البته تسلط بر دیزاین پترنها برای برنامه نویسهای سمت بک اند که با معماری و ساختارهای نرم افزار درگیر هستند ضروریتر است.