<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های باگتو</title>
        <link>https://virgool.io/feed/@bugeto</link>
        <description>ما در باگتو تصمیم گرفتیم تا با ارائه دوره‌های آموزشی جامع و متنوع در زمینه‌های مختلف NET، گامی مؤثر در جهت افزایش کیفیت مهارت‌های فنی برنامه‌نویسان و بهبود استانداردهای نرم‌افزاری ایرانی برداریم</description>
        <language>fa</language>
        <pubDate>2026-06-16 16:46:08</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/1320695/avatar/oceXg6.png?height=120&amp;width=120</url>
            <title>باگتو</title>
            <link>https://virgool.io/@bugeto</link>
        </image>

                    <item>
                <title>Blazor چیست؟فریمورکی برای ساخت برنامه‌های SPA با سی شارپ</title>
                <link>https://virgool.io/@bugeto/blazor-%DA%86%DB%8C%D8%B3%D8%AA%D9%81%D8%B1%DB%8C%D9%85%D9%88%D8%B1%DA%A9%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%B3%D8%A7%D8%AE%D8%AA-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-spa-%D8%A8%D8%A7-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE-fd111sozn3w2</link>
                <description>توسعه وب همواره یکی از حوزه‌های پرچالش و پرتحول در دنیای برنامه‌نویسی بوده است. از روزهای ابتدایی که صفحات وب استاتیک و ساده بودند تا امروز که برنامه‌های وب پیچیده و تعاملی به بخش جدایی‌ناپذیری از زندگی ما تبدیل شده‌اند، تکنولوژی‌های متعددی به میدان آمده و نقش خود را ایفا کرده‌اند. در این میان، یکی از جدیدترین و هیجان‌انگیزترین فریم‌ورک‌هایی که توسط مایکروسافت معرفی شده، Blazor  است.برای یادگیری این فریمورک بصوت عملی می توانید در دوره آموزش بلیزور باگتو با عنوان مستر کلاس بلیزور شرکت نمایید.بلیزور-Blazor چیست؟شاید بپرسید Blazor چیست و چرا این‌قدر مهم است؟ داستان Blazor از اینجا شروع می‌شود که مایکروسافت، که همواره به دنبال ساده‌سازی و بهبود تجربه توسعه‌دهندگان بوده، تصمیم گرفت راه‌حلی برای توسعه‌دهندگان #C ارائه کند تا بتوانند برنامه‌های وب را با همان زبان محبوب خود بنویسند و نیازی به یادگیری جاوااسکریپت نداشته باشند. اینجا بود که Blazor متولد شد.نام Blazor از ترکیب دو کلمه Browser  و Razor  به دست آمده است. Razor همان موتور قالب‌سازی معروفی است که در ASP.NET استفاده می‌شود و به توسعه‌دهندگان اجازه می‌دهد تا کدهای #C و HTML  را در یک فایل ترکیب کنند. اما Blazor پا را فراتر می‌گذارد و امکان اجرای این کدها را در مرورگر فراهم می‌کند. برای اینکه این نام راحت‌تر تلفظ شود، حرف &quot;L&quot; هم به آن اضافه شد. Blazor برای اولین بار در سال 2018 به عنوان یک پروژه آزمایشی معرفی شد، اما به سرعت توجه جامعه توسعه‌دهندگان را به خود جلب کرد و در نهایت در سال 2020 به عنوان یک فریم‌ورک رسمی از سوی مایکروسافت عرضه شد. Blazor به توسعه‌دهندگان سی شارپ این امکان را می‌دهد که برنامه‌های وب تعاملی و پیچیده را با استفاده از WebAssembly بسازند و تجربه‌ای مشابه با فریم‌ورک‌های جاوااسکریپت مانند React و Angular، اما با زبان #C، ارائه دهند.در ادامه این مقاله، به شما نشان خواهیم داد که Blazor چگونه کار می‌کند، چه تفاوتی با تکنولوژی‌های قدیمی‌تر دارد، و چگونه می‌تواند دنیای توسعه وب را برای شما آسان‌تر و جذاب‌تر کند. پس همراه ما باشید تا با این فریم‌ورک قدرتمند و مدرن بیشتر آشنا شوید..قبل از Blazor: زمانی که توسعه وب چالش‌برانگیزتر بوددر روزهایی که هنوز Blazor وجود نداشت، دنیای توسعه وب بسیار متفاوت بود. شاید وقتی به این مقاله رسیده‌اید، به دنبال یادگیری جاوااسکریپت نباشید، اما یادآوری روزهای قبل از Blazor می‌تواند به ما کمک کند تا بهتر بفهمیم چرا Blazor این‌قدر اهمیت دارد.به عنوان توسعه‌دهنده، با طیف گسترده‌ای از پلتفرم‌ها سر و کار داریم؛ از دسکتاپ و موبایل گرفته تا بازی‌ها، سرویس‌های ابری، هوش مصنوعی، و حتی اینترنت اشیا (IoT) .  هر کدام از این پلتفرم‌ها زبان‌های برنامه‌نویسی خاص خود را دارند، اما یکی از مهم‌ترین پلتفرم‌ها، برنامه‌هایی هستند که داخل مرورگر اجرا می‌شوند.سال‌ها به عنوان توسعه‌دهنده وب، دیده‌ام که چطور کدها از سرور به سمت مرورگرها منتقل شدند تا به‌طور مستقیم در آنجا اجرا شوند. این تغییر، روش توسعه برنامه‌های وب را متحول کرد. فریمورک‌هایی مثل Angular، React، و Vue به توسعه‌دهندگان اجازه دادند تا به جای بارگذاری مجدد کل صفحه، فقط بخش‌های کوچکی از صفحه را به‌صورت فوری به‌روزرسانی کنند. این روش جدید، تجربه کاربری را بهبود بخشید و سرعت بارگذاری صفحات را به نظر کاربران افزایش داد، حتی اگر کل صفحه به همان سرعت قبلی بارگذاری می‌شد.اما برای بسیاری از توسعه‌دهندگان، این تغییر به معنای یادگیری یک مجموعه جدید از مهارت‌ها بود. تصور کنید: شما کدی را در سمت سرور با زبان #C می‌نویسید، سپس باید آن را به JSON تبدیل کنید، از طریق API به سمت فرانت‌اند ارسال کنید، و دوباره آن را به یک شیء جاوااسکریپت تبدیل کنید تا در مرورگر نمایش داده شود.جاوااسکریپت در مرورگرهای مختلف به شکل‌های متفاوتی عمل می‌کرد، و کتابخانه‌هایی مثل jQuery تلاش کردند تا این تفاوت‌ها را با ارائه یک API مشترک پوشش دهند. اما امروزه تفاوت‌ها بین مرورگرها کمتر شده است و نیاز به jQuery در بسیاری از موارد کمتر احساس می‌شود.جاوااسکریپت با زبان‌های دیگر کمی متفاوت است؛ به عنوان مثال، شیءگرا و تایپ‌دار نیست. در سال 2010، اندرس هیلزبرگ طراح اصلی زبان‌های #C ، دلفی، و توربو پاسکال کار بر روی TypeScript را آغاز کرد، که یک زبان شیءگرا است و می‌تواند به جاوااسکریپت کامپایل یا ترنسپایل شود. شما می‌توانید از TypeScript در فریمورک‌هایی مثل Angular و React استفاده کنید، اما در نهایت کدی که در مرورگر اجرا می‌شود، جاوااسکریپت خواهد بود.ایجاد برنامه‌های وب تعاملی با استفاده از جاوااسکریپت یا TypeScript نیازمند تغییر زبان و انتخاب و پیگیری فریمورک‌های مختلف است. اما در Blazor، داستان کمی متفاوت است. حتی با این که درباره جاوااسکریپت صحبت می‌کنیم، تمرکز اصلی ما بر توسعه برنامه‌های وب تعاملی با استفاده از زبان#C خواهد بود.با ظهور WebAssembly، جاوااسکریپت دیگر تنها زبانی نیست که می‌تواند در مرورگر اجرا شود، و این دقیقاً همان جایی است که Blazor وارد داستان می‌شود و تجربه توسعه وب را دگرگون می‌کند.معرفی SPA (Single Page Application)کلمه Single Page Application  یا به اختصار SPA، نوعی برنامه وب است که در آن تمامی محتوا و اجزای مختلف برنامه، تنها در یک صفحه بارگذاری می‌شوند. برخلاف روش‌های قدیمی که هر بار با کلیک روی یک لینک، کل صفحه وب مجدداً بارگذاری می‌شد، در SPA تنها بخشی از صفحه که نیاز به تغییر دارد به‌روزرسانی می‌شود. این روش باعث می‌شود تجربه کاربری بهتری داشته باشیم؛ زیرا صفحات سریع‌تر بارگذاری می‌شوند و انتقال بین بخش‌های مختلف برنامه بسیار روان‌تر انجام می‌شود.چرا SPA امروزه پرکاربرد است؟اس پی ای(SPA)به دلیل چندین مزیت مهم بسیار محبوب شده‌اند. یکی از اصلی‌ترین مزیت‌ها، افزایش سرعت بارگذاری صفحات و کاهش زمان انتظار کاربران است. با استفاده از SPA، برنامه‌های وب می‌توانند بدون نیاز به بارگذاری مجدد کل صفحه، محتوا را به‌صورت پویا و سریع به‌روزرسانی کنند. این امر تجربه کاربری را بهبود می‌بخشد و باعث می‌شود کاربران بیشتر به استفاده از برنامه ترغیب شوند.همچنین، SPAها باعث کاهش ترافیک سرور می‌شوند؛ زیرا تنها داده‌های لازم از سرور دریافت می‌شود و نیاز به بارگذاری مجدد کل صفحه از بین می‌رود. این ویژگی به‌ویژه در برنامه‌های بزرگ و پیچیده وب که بارگذاری مجدد کل صفحه می‌تواند زمان‌بر و پرهزینه باشد، بسیار مفید است.تاریخچه SPA و فریم‌ورک‌های مرتبطاولین نشانه‌های SPA در دهه 2000 ظاهر شد، اما محبوبیت اصلی آن با ظهور فریم‌ورک‌هایی مثل AngularJS (در سال 2010)، React (در سال 2013) و Vue.js (در سال 2014) به اوج رسید. این فریم‌ورک‌ها به توسعه‌دهندگان کمک کردند تا برنامه‌های تک‌صفحه‌ای پیچیده و تعاملی را با استفاده از جاوااسکریپت ایجاد کنند. در این روش، کدهای جاوااسکریپت به مرورگر ارسال می‌شد و بر اساس تعامل کاربر، بخش‌های مختلف صفحه به‌روزرسانی می‌شدند.پیش از ظهور این فریم‌ورک‌ها، توسعه‌دهندگان وب از روش‌هایی مانند AJAX (Asynchronous JavaScript and XML) استفاده می‌کردند تا بخش‌هایی از صفحه را بدون نیاز به بارگذاری مجدد، به‌روزرسانی کنند. این روش به تدریج به پایه‌ای برای ساخت SPAها تبدیل شد.اما در سال‌های اخیر، با ظهور Blazor، توسعه‌دهندگان C# نیز قادر شدند تا SPAها را با استفاده از این زبان بسازند. Blazor از WebAssembly استفاده می‌کند که به کدهای #C اجازه می‌دهد در مرورگر اجرا شوند، بدون نیاز به جاوااسکریپت. این ویژگی Blazor را به ابزاری قدرتمند برای ساخت SPAها تبدیل کرده است، به ویژه برای توسعه‌دهندگانی که به زبان #C تسلط دارند.برای اینکه بهتر با مفهوم SPA آشنا شوید، چند نمونه از وب‌سایت‌های معروف را معرفی می‌کنم که از این تکنولوژی استفاده می‌کنند. یکی از بهترین مثال‌ها Gmail است؛ وقتی ایمیل‌های خود را باز می‌کنید یا بین پوشه‌ها جابجا می‌شوید، صفحه به‌طور کامل بارگذاری نمی‌شود و فقط بخشی از صفحه که نیاز به تغییر دارد به‌روزرسانی می‌شود. همچنین، Facebook و Twitter از دیگر نمونه‌های شناخته‌شده SPA هستند که با بارگذاری محتوای جدید بدون نیاز به رفرش کردن کل صفحه، تجربه کاربری بسیار سریعی را ارائه می‌دهند. می‌توانید به این سایت‌ها سری بزنید و تجربه خود را با آن‌ها بررسی کنید تا تفاوت را درک کنید.تفاوت Blazor با React و Angular در ایجاد SPAریکت  و Angular به عنوان فریم‌ورک‌های محبوب جاوااسکریپت برای ایجاد SPA، از جاوااسکریپت یا TypeScript برای مدیریت محتوای صفحه و به‌روزرسانی آن به‌صورت پویا استفاده می‌کنند. در این فریم‌ورک‌ها، کدهای جاوااسکریپت در مرورگر کاربر اجرا می‌شود و تغییرات لازم را بدون بارگذاری مجدد صفحه اعمال می‌کند.اما Blazor رویکرد متفاوتی دارد. Blazor به جای استفاده از جاوااسکریپت، از WebAssembly  استفاده می‌کند که به کدهای #C اجازه می‌دهد مستقیماً در مرورگر اجرا شوند. این یعنی شما می‌توانید از Blazor برای ایجاد SPAها استفاده کنید، بدون اینکه نیاز به جاوااسکریپت داشته باشید. این ویژگی Blazor را به گزینه‌ای جذاب برای توسعه‌دهندگان #C تبدیل کرده است.وب اسمبلی-WebAssembly :  تکنولوژی‌ای که وب را متحول کردوب اسمبلی ، یا به اختصار Wasm، یکی از جدیدترین و هیجان‌انگیزترین تکنولوژی‌های وب است که در سال 2017 معرفی شد. این تکنولوژی توسط کنسرسیومی از شرکت‌های بزرگ فناوری از جمله گوگل، موزیلا، اپل، و مایکروسافت توسعه داده شد. نکته جالب این است که WebAssembly متعلق به مایکروسافت نیست، بلکه یک استاندارد باز است که توسط شرکت‌های مختلف پشتیبانی می‌شود و برای همه مرورگرهای اصلی وب قابل استفاده است.WebAssemblyهدف از ایجاد WebAssemblyوب اسمبلی-WebAssembly با هدف بهبود عملکرد برنامه‌های وب و افزایش قابلیت‌های آنها طراحی شده است. در گذشته، جاوااسکریپت تنها زبان برنامه‌نویسی‌ای بود که می‌توانست مستقیماً در مرورگر اجرا شود. اما جاوااسکریپت، با وجود تمامی مزایای خود، محدودیت‌هایی داشت که باعث می‌شد برخی از برنامه‌ها نتوانند با عملکرد بهینه اجرا شوند. اینجاست که WebAssembly وارد می‌شود؛ WebAssembly به توسعه‌دهندگان این امکان را می‌دهد که کدهای خود را به یک فرمت باینری به نام Wasm کامپایل کنند. این فرمت باینری بسیار کارآمد است و می‌تواند به سرعت در مرورگر اجرا شود.چگونه WebAssembly کار می‌کند؟فرایند اجرای WebAssembly به این صورت است که ابتدا کدهای برنامه‌نویسی به Wasm کامپایل می‌شوند. این کد باینری سپس به مرورگر کاربر ارسال می‌شود و در آنجا به صورت Just-In-Time (JIT) به کد ماشین بومی کامپایل و اجرا می‌شود. این فرایند باعث می‌شود تا برنامه‌های WebAssembly با سرعتی بسیار نزدیک به برنامه‌های بومی (Native) اجرا شوند، در حالی که همچنان از امنیت و انعطاف‌پذیری برنامه‌های وب برخوردارندپشتیبانی از زبان‌های مختلف برنامه‌نویسییکی از ویژگی‌های برجسته WebAssembly این است که از زبان‌های مختلف برنامه‌نویسی پشتیبانی می‌کند. زبان‌هایی مثل( C، C++، Rust و حتی#C ) با استفاده از Blazor می‌توانند به Wasm کامپایل شوند و در مرورگر اجرا شوند. این یعنی توسعه‌دهندگان نیازی به یادگیری جاوااسکریپت ندارند تا بتوانند برنامه‌های پیچیده وب بنویسند؛ آنها می‌توانند از زبان‌هایی که با آن‌ها راحت‌تر هستند استفاده کنند.نمونه‌هایی از برنامه‌های ساخته‌شده با WebAssemblyوب اسمبلی- WebAssembly به‌طور گسترده در برنامه‌های مختلف استفاده می‌شود. یکی از مثال‌های شناخته‌شده، Google Earth است که با استفاده از WebAssembly ساخته شده و به کاربران اجازه می‌دهد تا به‌طور تعاملی نقشه‌های سه‌بعدی را در مرورگر خود مشاهده کنند. همچنین، Autodesk که نرم‌افزارهای طراحی سه‌بعدی می‌سازد، از WebAssembly برای ایجاد نسخه‌های وب برخی از نرم‌افزارهای سنگین خود استفاده می‌کند.حتی نسخه‌ای از سیستم‌عامل Windows 2000 نیز با استفاده از WebAssembly در مرورگر قابل اجرا است! این نشان‌دهنده قدرت و انعطاف‌پذیری این تکنولوژی است که به شما اجازه می‌دهد تا برنامه‌های بسیار پیچیده و حجیم را در مرورگر اجرا کنید.آینده  WebAssemblyبا پشتیبانی تمامی مرورگرهای اصلی از WebAssembly، این تکنولوژی به سرعت در حال رشد و تکامل است. توسعه‌دهندگان بیشتری در حال مهاجرت به این پلتفرم هستند و در آینده‌ای نه‌چندان دور، برنامه‌های وب پیشرفته‌تری را خواهیم دید که با استفاده از WebAssembly ساخته شده‌اند. WebAssembly، با ترکیب قدرت و سرعت برنامه‌های بومی و انعطاف‌پذیری برنامه‌های وب، به یکی از ابزارهای کلیدی توسعه وب تبدیل شده است.بلیزور-Blazor و WebAssembly :  تجربه اجرای #C در مرورگریکی از هیجان ‌انگیزترین ویژگی‌های Blazor این است که به شما اجازه می‌دهد کدهای #Cرا مستقیماً در مرورگر اجرا کنید، بدون نیاز به جاوااسکریپت. این امر به لطف WebAssembly ممکن شده است.   Blazor از WebAssembly برای اجرای کدهای #Cدر مرورگر استفاده می‌کند و این امکان را به توسعه‌دهندگان می‌دهد تا برنامه‌های وب تعاملی و پیشرفته را بدون تغییر زبان برنامه‌نویسی خود بسازند.بلیزور- Blazor چگونه کار می‌کند؟اجازه دهید ببینیم Blazor چگونه با WebAssembly کار می‌کند تا صفحات وب را به صورت داینامیک و بدون نیاز به جاوااسکریپت ایجاد کند.ابتدا، وقتی شما یک پروژه Blazor می‌سازید، فایل‌های Razor ایجاد می‌شوند. فایل‌های Razor ترکیبی از HTML و#C هستند که در نهایت به کلاسی در .NET تبدیل می‌شوند. این کلاس توسط موتور  Blazor اجرا می‌شود و نتیجه آن یک ساختار درختی به نام Render Tree است. این درخت رندر شبیه به یک نقشه از صفحه وب است که مشخص می‌کند چه عناصری باید در صفحه نمایش داده شوند.این Render Tree سپس به جاوااسکریپت ارسال می‌شود تا مرورگر بتواند بر اساس آن، DOM (Document Object Model) را به‌روزرسانی کند. DOM در واقع همان ساختار صفحه وب است که توسط مرورگر رندر و نمایش داده می‌شود. با کلیک روی یک دکمه یا انجام هر تعامل دیگری با صفحه، یک رویداد (Event) ایجاد می‌شود که باعث اجرای دوباره متدی مثل IncrementCount می‌شود. سپس Render Tree دوباره به‌روزرسانی شده و تغییرات لازم به جاوااسکریپت ارسال می‌شود تا DOM به‌روزرسانی شود.این فرآیند به شما امکان می‌دهد تا بدون نیاز به جاوااسکریپت، برنامه‌های وب تعاملی بسازید، و همه چیز با استفاده از #C در مرورگر اجرا شود. البته، اگر بخواهید از برخی ویژگی‌های خاص مرورگر استفاده کنید، همچنان می‌توانید جاوااسکریپت را با Blazor ترکیب کنید، اما این کاملاً اختیاری است و شما می‌توانید بیشتر کدهای خود را به زبان #C بنویسید.این مدل Blazor بسیار انعطاف‌پذیر است و به شما اجازه می‌دهد تا برنامه‌های پیشرفته وب (مثل Progressive Web Apps یا PWA) بسازید. همچنین، شما می‌توانید برنامه‌های Blazor خود را به صورت مستقیم در برنامه‌های دسکتاپی مثل Electron تعبیه کنید.این روش کار Blazor، انقلابی در توسعه وب محسوب می‌شود، به ویژه برای توسعه‌دهندگانی که به #C علاقه دارند و می‌خواهند از توانایی‌های آن در دنیای وب نیز استفاده کنند. Blazor به شما قدرت می‌دهد تا بدون تغییر زبان، همچنان در خط مقدم تکنولوژی وب بمانید و برنامه‌هایی بسازید که هم کارایی بالا دارند و هم تجربه کاربری بی‌نظیری ارائه می‌دهند.بلیزور سرور-Blazor Serveو Blazor WebAssembly  : دو راه متفاوت برای ساخت برنامه‌های وبانواع blazor   ، بلیزور دو مدل اصلی برای اجرای برنامه‌ها دارد:    Blazor Server و Blazor WebAssembly . هر کدام از این مدل‌ها مزایا و ویژگی‌های خاص خود را دارند. اجازه بدهید این دو مدل را به زبان ساده و روان توضیح دهم.بلیزور سرورBlazor Server : اجرای کدها روی سروردر Blazor Server، تمام کدهای برنامه شما روی سرور اجرا می‌شوند. به این معنا که وقتی یک کاربر از طریق مرورگر به برنامه شما دسترسی پیدا می‌کند، مرورگر تنها یک صفحه ساده (HTML) را دریافت می‌کند که به یک سرور متصل است. هر زمانی که کاربر با صفحه تعامل می‌کند (مثلاً روی یک دکمه کلیک می‌کند)، این تعامل از طریق سیگنال‌هایی به سرور ارسال می‌شود.سرور سپس کدهای #C را اجرا کرده، تغییرات لازم را اعمال می‌کند، و نتیجه را به مرورگر کاربر برمی‌گرداند. این مدل نیازمند یک اتصال پایدار و سریع به سرور است، زیرا هر تعامل کاربر باید به سرور ارسال شده و پاسخ آن دریافت شود.این مدل مزیت‌هایی دارد، مثل:حفاظت از کدهای برنامه: چون کدها در سرور اجرا می‌شوند، امنیت بیشتری دارند.استفاده از منابع سبک: چون مرورگر کاربر نیاز به اجرای کدها ندارد، منابع کمتری مصرف می‌کند.به‌روزرسانی آسان: تغییرات در برنامه به سرعت و بدون نیاز به بارگذاری مجدد کل صفحه اعمال می‌شوند.اما از طرف دیگر، این مدل وابسته به سرعت و پایداری اتصال به سرور است. اگر اتصال قطع شود، برنامه نمی‌تواند به درستی کار کند.بلیزور وب اسمبلی -Blazor WebAssembly : اجرای کدها در مرورگربلیزور وب اسمبلی Blazor WebAssembly  یک رویکرد متفاوت دارد. در این مدل، کدهای برنامه شما به فرمت  WebAssembly (Wasm)   کامپایل شده و مستقیماً در مرورگر کاربر اجرا می‌شوند. این یعنی تمام منطق برنامه در مرورگر انجام می‌شود و سرور تنها برای ارسال و دریافت داده‌ها مثل APIها استفاده می‌شود.با Blazor WebAssembly، کاربران می‌توانند برنامه را به صورت آفلاین نیز استفاده کنند، زیرا کدها در مرورگر کاربر قرار دارند.این مدل مزایای زیر را دارد:استقلال از سرور: برنامه شما حتی بدون اتصال به اینترنت نیز می‌تواند تا حدی کار کند.بهینه‌سازی برای تجربه کاربری: چون کدها محلی اجرا می‌شوند، سرعت و پاسخگویی برنامه بالا است.توزیع آسان: کاربران نیازی به اتصال مداوم به سرور ندارند و تنها با یک بار بارگذاری، برنامه به صورت کامل در مرورگرشان اجرا می‌شود.اما Blazor WebAssembly نیز چالش‌های خود را دارد:زمان بارگذاری اولیه: چون تمامی کدها باید به مرورگر کاربر دانلود شوند، ممکن است بارگذاری اولیه کمی طول بکشد.محدودیت‌های منابع مرورگر: کدها در مرورگر اجرا می‌شوند و بسته به قدرت دستگاه کاربر، ممکن است عملکرد متفاوت باشد.کدام مدل را انتخاب کنیم؟انتخاب بین Blazor Server و Blazor WebAssembly بستگی به نیازهای پروژه و کاربران شما دارد. اگر برنامه شما به یک اتصال سریع و پایدار نیاز دارد و امنیت کدها برای شما اهمیت بالایی دارد، Blazor Server گزینه مناسبی است. اما اگر می‌خواهید برنامه‌ای که کاربران می‌توانند به صورت آفلاین هم استفاده کنند و تجربه کاربری بهتری در زمان پاسخ‌دهی سریع داشته باشد، Blazor WebAssembly را انتخاب کنید.هر دو مدل Blazor، قدرت زیادی به توسعه‌دهندگان #cمی‌دهند تا برنامه‌های وب پیشرفته و تعاملی را با استفاده از زبان و ابزارهایی که می‌شناسند، بسازند. با انتخاب درست بین این دو مدل، می‌توانید بهترین تجربه را برای کاربران خود فراهم کنید.پی دبیلیو ای PWA (Progressive Web App) : آینده‌ای جذاب برای اپلیکیشن‌های وبپی دبلیو اPWA چیست؟پی دبیلیو ای PWA یا Progressive Web App  نوعی از برنامه‌های وب است که ترکیبی از بهترین ویژگی‌های وب و اپلیکیشن‌های موبایل را ارائه می‌دهد. یک PWA مانند یک وب‌سایت عمل می‌کند، اما به کاربران اجازه می‌دهد تا آن را مانند یک اپلیکیشن موبایل نصب کنند و حتی به صورت آفلاین از آن استفاده کنند. این برنامه‌ها می‌توانند از ویژگی‌های دستگاه مانند ارسال نوتیفیکیشن، دسترسی به دوربین و غیره استفاده کنند و تجربه‌ای نزدیک به اپلیکیشن‌های بومی (Native) ارائه دهند.چرا PWAها ایجاد می‌شوند؟پی دبلیو ای PWAها با هدف ارائه تجربه‌ای بهتر برای کاربران ایجاد شده‌اند. در دنیای امروز، کاربران انتظار دارند برنامه‌های وب به همان سرعت و کارایی اپلیکیشن‌های موبایل عمل کنند. با استفاده از PWAها، می‌توان این تجربه را فراهم کرد:سرعت و کارایی بالا:  PWAها به صورت محلی در دستگاه کاربر ذخیره می‌شوند و این باعث می‌شود تا برنامه با سرعت بیشتری بارگذاری شود.امکان استفاده آفلاین: یکی از مهم‌ترین ویژگی‌های PWAها این است که حتی در صورت نبود اینترنت، کاربران می‌توانند به برنامه دسترسی داشته باشند.قابلیت نصب: کاربران می‌توانند PWA را به راحتی روی صفحه اصلی دستگاه خود نصب کنند و مانند یک اپلیکیشن موبایل از آن استفاده کنند.به‌روزرسانی خودکار: PWA ها به‌طور خودکار به‌روزرسانی می‌شوند و همیشه نسخه‌ی جدیدتری از برنامه در دسترس کاربران قرار می‌گیرد.چگونه می‌توان با Blazor یک PWA ساخت؟Blazor  به شما این امکان را می‌دهد تا به راحتی PWA بسازید و تجربه‌ی قدرتمند و تعاملی‌ای برای کاربران خود فراهم کنید. برای ساخت یک PWA با Blazor، تنها کافیست پروژه Blazor خود را با تنظیمات PWA ایجاد کنید. این کار به راحتی با اضافه کردن چندین فایل و تنظیمات به پروژه انجام می‌شود که شامل:مورد اولManifest file: این فایل مشخصات اپلیکیشن مانند نام، آیکون و نحوه نمایش در دستگاه کاربر را تعریف می‌کند.مورد دوم Service Worker: این فایل وظیفه مدیریت کش و امکان استفاده آفلاین از برنامه را دارد. Service Worker به عنوان واسط بین مرورگر و سرور عمل می‌کند و درخواست‌های کاربر را مدیریت می‌کند تا تجربه‌ای بدون نقص ارائه شود.با این تنظیمات، برنامه Blazor شما به یک PWA تبدیل می‌شود که کاربران می‌توانند آن را نصب کنند، حتی بدون نیاز به اپ استورهای معمولی  مانند گوگل پلی یا اپ استور .blazor این امکان را می‌دهد تا تمام امکانات PWA را بدون نیاز به یادگیری زبان‌های جدید پیاده‌سازی کنید و برنامه‌ای بسازید که هم‌زمان هم یک وب‌سایت قدرتمند و هم یک اپلیکیشن موبایل کارا باشدتفاوت Blazor و Razor: دو تکنولوژی با کاربردهای مختلفبلیزور-Blazorو  Razor هر دو تکنولوژی‌هایی هستند که در توسعه برنامه‌های وب استفاده می‌شوند، اما هر کدام نقش و کاربرد متفاوتی دارند. بیایید این دو را به زبان ساده بررسی کنیم.ریزور -Razor چیست؟ریزور- Razor یک موتور قالب‌سازی (Templating Engine) است که توسط مایکروسافت توسعه داده شده و به شما امکان می‌دهد HTML و کدهای#cرا در یک فایل با هم ترکیب کنید. Razor بیشتر در فریم‌ورک‌های ASP.NET MVC و Razor Pages استفاده می‌شود. با Razor، می‌توانید کدهای #c را درون فایل‌های HTML خود بنویسید و به‌طور مستقیم از داده‌ها در صفحات وب استفاده کنید.به عبارت ساده، Razor به شما کمک می‌کند تا صفحات وب داینامیک بسازید که به سرور متصل هستند و محتوا را بر اساس داده‌های سرور به‌روز می‌کنند. اما این کدها همیشه روی سرور اجرا می‌شوند و نتیجه‌ی آن به مرورگر ارسال می‌شود.بلیزور- Blazor چیست؟بلیزور-Blazor یک فریم‌ورک جدیدتر است که به شما اجازه می‌دهد تا برنامه‌های وب تعاملی و پیچیده‌ای را با استفاده از #C بسازید. برخلاف Razor که فقط روی سرور اجرا می‌شود، Blazor می‌تواند هم در سرور و هم در مرورگر اجرا شود. این ویژگی به Blazor امکان می‌دهد که مانند فریم‌ورک‌های جاوااسکریپت مثل Angular یا React عمل کند، اما با استفاده از#cبه جای جاوااسکریپت.Blazor از Razor برای ساختن کامپوننت‌های UI استفاده می‌کند. این کامپوننت‌ها به دو روش اجرا می‌شوند: یا مستقیماً در مرورگر کاربر با استفاده از Blazor WebAssembly اجرا می‌شوند، یا روی سرور پردازش می‌شوند و نتیجه به مرورگر فرستاده می‌شود که این روش Blazor Server نام دارد.تفاوت اصلیدر Razor :  ابزاری برای ترکیب HTML و #C در سرور و تولید صفحات وب داینامیک که کدهای آن همیشه روی سرور اجرا می‌شوند.درBlazor : فریم‌ورکی که به شما اجازه می‌دهد برنامه‌های وب تعاملی و پیچیده‌ای را با #C بسازید و این برنامه‌ها می‌توانند هم در مرورگر و هم در سرور اجرا شوند.به طور خلاصه، Razor  بیشتر برای ساخت صفحات وب داینامیک در سمت سرور استفاده می‌شود، در حالی که Blazor  برای ساخت برنامه‌های وب تعاملی که می‌توانند در مرورگر اجرا شوند، طراحی شده است.برای شرکت در دوره آموزش بلیزور می توانید در قسمت دوره ها دوره مستر کلاس بلیزور را انتخاب کنید.نتیجه‌گیریبلیزور -Blazor به عنوان یکی از جدیدترین و قدرتمندترین فریم‌ورک‌های توسعه وب توسط مایکروسافت، به توسعه‌دهندگان #C این امکان را می‌دهد تا برنامه‌های وب تعاملی و پیشرفته‌ای را با استفاده از زبانی که به آن مسلط هستند، بسازند. با ترکیب قابلیت‌های Razor و قدرت WebAssembly،  بلیزور توانسته است پلی بین دنیای سرور و مرورگر ایجاد کند که بدون نیاز به جاوااسکریپت، تجربه‌ای مشابه فریم‌ورک‌های جاوااسکریپت مانند React و Angular ارائه دهد.فریم‌ورک Blazor نه تنها ابزارهای جدیدی برای توسعه وب به ارمغان آورده، بلکه با امکاناتی مثل Blazor Server و Blazor WebAssembly، انتخاب‌های متعددی را در اختیار توسعه‌دهندگان قرار داده تا بهترین روش را برای نیازهای پروژه خود انتخاب کنند. همچنین، با امکان ساخت PWA ،  بلیزور به شما اجازه می‌دهد برنامه‌هایی بسازید که مانند اپلیکیشن‌های موبایل، حتی به صورت آفلاین، کار کنند.به طور کلی، Blazor مسیر جدیدی را برای توسعه‌دهندگان باز کرده است که می‌تواند آینده توسعه وب را دگرگون کند. این فریم‌ورک با ترکیب سادگی، انعطاف‌پذیری، و قدرت #C در دنیای وب، راهی نوین برای ساخت برنامه‌های پیشرفته و کاربرپسند ارائه می‌دهد. اگر تا به حال Blazor را امتحان نکرده‌اید، اکنون زمان مناسبی است که با این ابزار قدرتمند آشنا شوید و از امکانات بی‌نظیر آن بهره‌مند شوید.در صورتی که به دنبال یادگیری بیشتر و آشنایی با جنبه‌های مختلف Blazor هستید، مقالات متعددی در این زمینه وجود دارند که می‌توانند شما را راهنمایی کنند. مثلاً اگر می‌خواهید بدانید  Blazor Auto چیست و چطور به توسعه‌دهندگان کمک می‌کند، می‌توانید این مقالات را مطالعه کنید. همچنین، برای انتخاب بین Blazor Server و Blazor WebAssembly و اینکه هر کدام برای چه پروژه‌هایی مناسب‌تر هستند، مقاله‌های تخصصی داریم. اگر به دنبال ساخت رابط کاربری مدرن با MudBlazor هستید یا می‌خواهید بدانید چطور از MudBlazor استفاده کنید، این مطالب به شما کمک خواهند کرد. در نهایت، برای مقایسه Blazor با React یا آشنایی با مزایا و معایب Blazor، پیشنهاد می‌کنم به مقالات مرتبط سر بزنید و از مطالب دیگر باگتو هم استفاده کنید.</description>
                <category>باگتو</category>
                <author>باگتو</author>
                <pubDate>Mon, 24 Feb 2025 11:41:34 +0330</pubDate>
            </item>
                    <item>
                <title>حقوق مهندسان نرم‌افزار: راهکارها و توصیه‌ها برای دستیابی به بالاترین سطح درآمد</title>
                <link>https://virgool.io/@bugeto/%D8%AD%D9%82%D9%88%D9%82-%D9%85%D9%87%D9%86%D8%AF%D8%B3%D8%A7%D9%86-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-%D8%B1%D8%A7%D9%87%DA%A9%D8%A7%D8%B1%D9%87%D8%A7-%D9%88-%D8%AA%D9%88%D8%B5%DB%8C%D9%87-%D9%87%D8%A7-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AF%D8%B3%D8%AA%DB%8C%D8%A7%D8%A8%DB%8C-%D8%A8%D9%87-%D8%A8%D8%A7%D9%84%D8%A7%D8%AA%D8%B1%DB%8C%D9%86-%D8%B3%D8%B7%D8%AD-%D8%AF%D8%B1%D8%A2%D9%85%D8%AF-o7r6rexaxq0w</link>
                <description>در دنیای پرشتاب فناوری اطلاعات، دستیابی به درآمد بالا و موفقیت در حوزه مهندسی نرم‌افزار، هدف بسیاری از توسعه‌دهندگان است. اما چگونه می‌توانید از یک برنامه‌نویس معمولی و سطح متوسط جدا شوید و به جایگاهی دست یابید که حقوقی بالاتر از میانگین دریافت کنید؟ این مقاله راهکارها و توصیه‌هایی را ارائه می‌دهد که به شما کمک می‌کند به درآمد بالاتر برسید، از مهارت‌های خود به بهترین شکل استفاده کنید، و در مصاحبه‌ها و مذاکرات حقوقی موفق شوید. پس، اگر مشتاق ارتقای شغلی و درآمد هستید، این مقاله مختص شماست.مهندس نرم‌افزار چه کاری انجام می‌دهد؟مهندس نرم‌افزار مسئول طراحی و پیاده‌سازی سیستم‌های نرم‌افزاری است. این سیستم‌ها می‌توانند از برنامه‌های ساده تا سرویس‌های پیچیده مبتنی بر ابر باشند. وظایف کلیدی مهندس نرم‌افزار عبارت‌اند از:طراحی سیستم‌ها: مهندسان نرم‌افزار با استفاده از مهارت‌های فنی و دانش معماری نرم‌افزار، ساختار سیستم‌های بزرگ را طراحی می‌کنند. این طراحی شامل تعیین ماژول‌ها، نحوه ارتباط اجزا، و ساختار کلی سیستم است.پیاده‌سازی و کدنویسی: آن‌ها بر اساس طرح اولیه، بخش‌های مختلف سیستم را پیاده‌سازی کرده و کدنویسی می‌کنند. این فرآیند شامل نوشتن کدهای لازم برای برنامه‌ها، تست، و بهینه‌سازی آن‌ها است.مدیریت چرخه حیات پروژه: مهندسان نرم‌افزار تمام چرخه حیات پروژه را مدیریت می‌کنند. این کار شامل برنامه‌ریزی، زمان‌بندی، تخصیص منابع، نظارت بر روند توسعه، و به‌روزرسانی است.ارتباط با سهامداران: به دلیل اهمیت استراتژیک نرم‌افزارها در سازمان‌ها، مهندسان نرم‌افزار نیاز به برقراری ارتباط با سهامداران دارند تا نیازهای پروژه به‌درستی درک شود و هم‌ترازی میان تیم‌های مختلف حفظ شود.تفاوت با توسعه‌دهندگان نرم‌افزار:توسعه‌دهندگان نرم‌افزار معمولاً بیشتر بر جنبه‌های فنی کدنویسی تمرکز دارند و وظایف آن‌ها محدودتر است. آن‌ها مسئول اجرای قسمت‌های مشخصی از سیستم هستند، درحالی‌که مهندسان نرم‌افزار به طراحی کل سیستم، استراتژی پیاده‌سازی، و نظارت بر روند توسعه توجه دارند.با وجود این تفاوت‌ها، هر دو نقش در همکاری با یکدیگر به ارائه یک محصول باکیفیت منجر می‌شوند.حقوق متوسط یک مهندس نرم‌افزار چقدر است؟درآمد مهندسان نرم‌افزار بسته به نقش و تجربه آن‌ها متفاوت است. در این مقاله، به دلیل نوسانات زیاد نرخ ارز، ارقام به دلار بیان شده‌اند.در سطح جهانی:در ایالات متحده، درآمد متوسط سالانه مهندسان نرم‌افزار به حدود 98,783 دلار می‌رسد. مهندسان متخصص مانند مهندسان ابری و سیستم‌ها درآمدی بین 120,000 تا 150,000 دلار در سال دارند.​سایر کشورهای توسعه‌یافته مانند آلمان، استرالیا، و کانادا، این ارقام به‌طور میانگین بین 70,000 تا 100,000 دلار در سال هستند.منابع: (Coursera)​​ (Dice)​وضعیت در ایران:در ایران، حقوق مهندسان نرم‌افزار در سال 1402 بسته به شرکت و میزان تجربه متفاوت است. میانگین حقوق ماهیانه برای بسیاری از مهندسان نرم‌افزار در شرکت‌های ایرانی از 50 میلیون تومان شروع می‌شود، اما برخی از شرکت‌ها به متخصصان خود بیش از 120 میلیون تومان در ماه پرداخت می‌کنند.این مبالغ بسته به نرخ ارز معادل حدود 12,000 تا 29,000 دلار در سال می‌شود، که به‌مراتب پایین‌تر از میانگین جهانی است.مقایسه کلی:به‌طورکلی، اختلاف درآمد بین ایران و میانگین جهانی به دلیل تفاوت‌های اقتصادی و ارزی است. با این‌حال، همچنان فرصت‌هایی برای متخصصان ایرانی وجود دارد تا با بهبود مهارت‌های خود و یافتن فرصت‌های بین‌المللی به درآمدهای بالاتری دست یابند.آیا همچنان مهندسان نرم‌افزار موردنیاز هستند؟رشد تقاضا برای مهندسان نرم‌افزار بسیار بالا است و با توجه به روند رو به رشد فناوری و دیجیتالی شدن صنایع، این تقاضا در سال‌های آینده افزایش خواهد یافت.افزایش تقاضا: سازمان‌های مختلفی به مهارت‌های مهندسان نرم‌افزار نیاز دارند، از شرکت‌های فناوری اطلاعات گرفته تا صنایع مالی، تولیدی، و حتی مراقبت‌های بهداشتی. پروژه‌های دیجیتالی‌سازی و اتوماسیون در سراسر جهان در حال گسترش است و پیش‌بینی می‌شود در 10 سال آینده تقاضا برای این حرفه 17.3 درصد رشد کند.​ (Dice)​فرصت‌ها: نقش‌های مختلفی در این زمینه مورد نیاز است؛ از توسعه‌دهندگان وب و موبایل گرفته تا مهندسان امنیت، داده، و ابری. در نتیجه، افراد با مهارت‌های مختلف در مهندسی نرم‌افزار می‌توانند فرصت‌های شغلی مناسبی پیدا کنند.مهارت‌های پرتقاضا: کارفرمایان به‌خصوص به دنبال افرادی با توانایی کار با ابزارها و فناوری‌های جدید مانند GitHub،  AWS، و JSON هستند. همچنین، تخصص در توسعه سیستم‌های ابری، امنیت سایبری، و بهینه‌سازی عملکرد سیستم‌ها به‌شدت ارزشمند است.به‌طورکلی، با توجه به رشد فناوری و نیاز سازمان‌ها به دیجیتالی شدن، چشم‌انداز افزایش شغل در این حوزه بسیار روشن است.مهارت‌های ضروری یک مهندس نرم‌افزار:تبدیل‌شدن به یک مهندس نرم‌افزار موفق مستلزم توسعه و به‌روز نگه‌داشتن مهارت‌های زیر است:یادگیری تکنولوژی‌های پرتقاضا:گیت هاب GitHub : ابزار مدیریت کد که امکان اشتراک‌گذاری، پیگیری تغییرات، و همکاری با دیگر توسعه‌دهندگان را فراهم می‌کند. تسلط به این پلتفرم باعث می‌شود کدها به‌خوبی مدیریت و نسخه‌بندی شوند.تکنولوژیAWS (Amazon Web Services): مجموعه‌ای از خدمات ابری که برای میزبانی، ذخیره‌سازی، و پردازش داده‌ها به‌کار می‌رود. آشنایی با سرویس‌های Azure مایکروسافت و Google Cloud نیز بسیار مفید است، زیرا بسیاری از شرکت‌ها از این خدمات استفاده می‌کنند.فرمت JSON (JavaScript Object Notation): این فرمت داده برای انتقال اطلاعات بین سیستم‌ها استفاده می‌شود. مهارت در JSON و فناوری‌های مرتبط مانند REST API،  GraphQL، و WebSocket برای ایجاد ارتباطات قوی و سریع بین سیستم‌ها ضروری است.توسعه فول استک (Full-Stack): به‌جای تمرکز بر یک حوزه، مهندسان فول استک بر تمامی جنبه‌های توسعه وب مسلط هستند؛ از فرانت‌اند (رابط کاربری) گرفته تا بک‌اند (سرور). این تخصص، درک چرخه کامل توسعه پروژه را امکان‌پذیر می‌کند و باعث انعطاف‌پذیری بیشتر در حل مسائل می‌شود.آشنایی با معماری‌های میکروسرویس و DDD (Domain-Driven Design) برای سازماندهی و توسعه ساختاریافته بخش‌های مختلف پروژه ضروری است. همچنین، استفاده از SPA (Single Page Applications) در ساخت رابط‌های کاربری سریع و تعاملی مهم است.تمرکز بر امنیت، مقیاس‌پذیری، و عملکرد پایدار سیستم‌ها:امنیت: طراحی سیستم‌ها باید به‌گونه‌ای باشد که داده‌ها از تهدیدات سایبری محافظت شوند.مقیاس‌پذیری: سیستم‌ها باید با افزایش تعداد کاربران یا حجم کار، عملکرد خوبی داشته باشند.عملکرد پایدار: سیستم‌ها باید در شرایط مختلف، عملکرد پایدار و سازگاری داشته باشند.این مهارت‌ها نه‌تنها شما را به یک مهندس نرم‌افزار کارآمد تبدیل می‌کنند، بلکه باعث می‌شوند در بازار کار متمایز شده و فرصت‌های بیشتری برای کسب موفقیت پیدا کنید.مذاکره بر سر حقوق:در مذاکره برای حقوق مناسب، داشتن استراتژی و آمادگی کامل اهمیت زیادی دارد. چند نکته مهم وجود دارد که به شما کمک می‌کند در این زمینه به موفقیت برسید:مذاکره بر سر حقوق تعیین انتظارات مشخص:پیش از ورود به مذاکره، حتماً انتظارات خود را از نظر میزان حقوق، مزایا، و سایر شرایط مشخص کنید. دانستن ارزش خود و تحقیق درباره میانگین حقوق در صنعت و منطقه جغرافیایی، به شما در تعیین سطح انتظارات کمک می‌کند.داشتن یک پیشنهاد رقابتی دیگر:داشتن پیشنهاد شغلی دیگر از شرکت‌های معتبر می‌تواند به‌عنوان یک اهرم مذاکره قوی عمل کند. این کار نشان می‌دهد که شما در بازار کار باارزش هستید و گزینه‌های جایگزینی دارید.به گفته برایان تریسی در کتاب هنر مذاکره ، «شما همیشه حق دارید خواسته‌های خود را بیان کنید. اینکه آیا به خواسته‌تان می‌رسید یا نه، بستگی به آمادگی شما و نحوه مذاکره‌تان دارد.» آماده‌سازی استراتژی و اهداف خود پیش از ورود به جلسه مذاکره، اعتماد به‌نفس و توانایی مذاکره موفقیت‌آمیز را فراهم می‌کند.تکنیک‌های مذاکره:گوش دادن فعال:  به‌دقت به طرف مقابل گوش دهید تا بفهمید چه چیزی برای آن‌ها مهم است و متناسب با آن مذاکره کنید.پیشنهادهای جایگزین: در مذاکره انعطاف‌پذیر باشید و راه‌حل‌های جایگزینی ارائه دهید که ممکن است برای هر دو طرف سودمند باشد.تمرکز بر ارزش: به جای چانه‌زدن صرف بر سر مبلغ، روی ارزشی که می‌توانید به شرکت بیاورید و تجربه‌هایی که از گذشته دارید، تاکید کنید.مذاکره مؤثر برای حقوق، به زمان، تحقیق، و آمادگی نیاز دارد؛ اما ارزش این سرمایه‌گذاری را دارد و می‌تواند به دریافت حقوق بالاتر منجر شود.اهمیت یادگیری مداوم و گسترش مهارت‌هادر صنعت فناوری که به‌سرعت در حال تغییر است، یادگیری مداوم یکی از مهم‌ترین عوامل موفقیت است. مهندسان نرم‌افزار برای به‌روز ماندن با فناوری‌های جدید، به‌روزرسانی دانش خود و حفظ توانایی رقابت در بازار کار، باید به‌طور مستمر یاد بگیرند.اهمیت یادگیری مداوم و گسترش مهارت‌هااهمیت یادگیری مداوم:پیشرفت شخصی: یادگیری مداوم باعث بهبود مهارت‌ها و توانایی‌های شما می‌شود. این روند رشد، در طولانی‌مدت به پیشرفت شغلی و افزایش اعتمادبه‌نفس منجر خواهد شد.فرصت‌های شغلی بیشتر:  با به‌روز نگه‌داشتن مهارت‌ها، احتمال بیشتری دارد که به فرصت‌های شغلی جذاب دست یابید.خلاقیت و نوآوری:  یادگیری مداوم ذهن را برای ایده‌های جدید باز می‌کند و به یافتن راه‌حل‌های خلاقانه برای مشکلات پیچیده کمک می‌کند.برایان تریسی، نویسنده کتاب قورباغه را قورت بده، می‌گوید: «بزرگ‌ترین سرمایه‌گذاری شما، سرمایه‌گذاری در توسعه شخصی‌تان است.» این سرمایه‌گذاری با یادگیری مداوم باعث پیشرفت حرفه‌ای و دستیابی به موفقیت‌های جدید می‌شود.روش‌های یادگیری مداوم:برنامه روزانه: روزانه حداقل یک ساعت را به یادگیری اختصاص دهید. اگر این برنامه را به‌طور مداوم دنبال کنید، بعد از یک سال بیش از 365 ساعت مطالعه خواهید داشت که معادل بیش از 45 روز کاری است.دوره‌های آنلاین: در دوره‌های آموزشی آنلاین شرکت کنید و گواهینامه‌های معتبر کسب کنید.کتاب‌ها و منابع تخصصی:  خواندن کتاب‌ها، مقالات تخصصی، و دنبال کردن وبینارها، راهی عالی برای به‌روز ماندن است.شبکه‌سازی: با متخصصان صنعت ارتباط برقرار کنید و از تجربیات آن‌ها استفاده شوید.این روش‌ها نه‌تنها باعث ارتقای مهارت‌ها می‌شود، بلکه به گسترش فرصت‌های شغلی و افزایش موفقیت در حرفه مهندسی نرم‌افزار نیز کمک می‌کند.فقط دانش فنی کافی نیست! مهارت‌های نرم که باید مهندس نرم‌افزار داشته باشدداشتن مهارت‌های نرم یا همان سافت اسکیل برای موفقیت مهندسان نرم‌افزار بسیار مهم است. این مهارت‌ها در کنار دانش فنی به شما امکان می‌دهند تا به‌طور مؤثر با دیگران کار کنید، مشکلات پیچیده را حل کنید، و رهبری تیم را بر عهده بگیرید.مهارت‌های نرم که باید مهندس نرم‌افزار داشته باشدمهارت‌های نرم ضروری:ارتباطات مؤثر:توانایی برقراری ارتباط روشن با همکاران، مدیران و سهامداران بسیار مهم است. یک مهندس نرم‌افزار باید بتواند مفاهیم فنی را به‌صورت ساده و قابل‌درک برای همه توضیح دهد.حل مسئله:در مواجهه با مشکلات پیچیده، مهندسان نرم‌افزار باید بتوانند از رویکردهای خلاقانه برای یافتن راه‌حل‌های کارآمد استفاده کنند. این مهارت به‌ویژه در شرایط بحرانی بسیار مهم است.مدیریت زمان:مدیریت زمان به شما کمک می‌کند وظایف خود را اولویت‌بندی کرده و پروژه‌ها را در مهلت مقرر تکمیل کنید.همکاری تیمی:کار بر روی پروژه‌های بزرگ نیاز به هماهنگی و همکاری دارد. داشتن روحیه تیمی و توانایی مشارکت فعال در گروه، شما را به یک عضو ارزشمند تبدیل می‌کند.رهبری:مهارت‌های رهبری به شما کمک می‌کند تا بتوانید به‌عنوان یک مدیر پروژه یا سرپرست تیم، جهت‌دهی و سازماندهی مناسبی داشته باشید.تطبیق‌پذیری:دنیای فناوری به‌سرعت در حال تغییر است، و مهندسان نرم‌افزار باید بتوانند خود را با فناوری‌ها و روش‌های جدید سازگار کنند.این مهارت‌های نرم به شما کمک می‌کنند تا در کنار مهارت‌های فنی، به‌عنوان یک مهندس نرم‌افزار موفق شناخته شوید و نقش مؤثرتری در سازمان داشته باشید.بررسی چند آگهی استخدامبا بررسی چندین آگهی استخدام برای مهندسان نرم‌افزار و توسعه‌دهندگان .NET، مهارت‌های موردنیاز و نکات مشترکی یافتیم که به شما کمک می‌کند شانس بیشتری برای موفقیت در این پوزیشن‌ها داشته باشید:مهارت‌های فنی رایج:تسلط به C# و .NET Core: زبان برنامه‌نویسی اصلی و فریم‌ورک موردنیاز تقریباً در تمامی آگهی‌ها تکرار شده است.فریمورکEntity Framework : اکثر آگهی‌ها بر تسلط به این ORM برای ارتباط با پایگاه‌داده‌های SQL Server تأکید دارند.نقشWeb API  و ASP.NET Core : پیاده‌سازی و توسعه APIها و سرویس‌های وب بخش مهمی از نقش‌هاست.شی گراییOOP و SOLID :داشتن درک عمیق از مفاهیم شی‌گرایی و اصول SOLID به شما در طراحی کدهای ساختاریافته کمک می‌کند.پایگاه داده SQL Server  : مدیریت و بهینه‌سازی پایگاه‌داده‌های SQL در توسعه برنامه‌های بک‌اند ضروری است.مهارت‌های Front-End :آشنایی با HTML، CSS، JavaScript، و فریم‌ورک‌های مدرن مانند Angular و React، Blazor ، به‌عنوان مزیت محسوب می‌شود.تست و DevOps :توانایی پیاده‌سازی Unit Testing و آشنایی با CI/CD و ابزارهای مدیریت سورس مانند GitFlow، GitLab، و TFS مهم است.معماری نرم‌افزار:  طراحی معماری‌های  Onion، Clean، Microservices، و DDD در توسعه سیستم‌های مقیاس‌پذیر و کارآمد ارزشمند است.مهارت‌های نرم فردی:کار تیمی و مدیریت زمان:  داشتن روحیه کار تیمی و توانایی برنامه‌ریزی برای تکمیل پروژه‌ها در زمان مقرر اهمیت دارد.ارتباط مؤثر: قابلیت برقراری ارتباط خوب با سایر اعضای تیم و سهامداران برای هماهنگی پروژه‌ها بسیار مهم است.حل مسئله و یادگیری مداوم:  مهندسان باید توانایی حل چالش‌های فنی را داشته و علاقه‌مند به یادگیری فناوری‌های جدید باشند.بررسی آگهی‌های استخدام نشان می‌دهد که مهارت‌های فنی و نرم ترکیبی از تجربه و توانایی هستند. با تقویت این موارد، می‌توانید فرصت‌های شغلی بهتری پیدا کنید و در زمینه مهندسی نرم‌افزار موفق‌تر باشیدمنابعی برای یادگیری مهارت‌های نرمدر کنار مهارت‌های فنی، توسعه‌دهندگان نرم‌افزار باید به یادگیری مهارت‌های نرم بپردازند تا بتوانند در نقش‌های خود موفق‌تر باشند. این کتاب‌ها به شما کمک می‌کنند مهارت‌های موردنیاز را تقویت کنید:رهبری:کتاب The 21 Irrefutable Laws of Leadership نوشته جان سی. ماکسول: این کتاب قوانین اساسی رهبری را ارائه می‌دهد که برای موفقیت در هر سطحی از سازمان به آن نیاز دارید.کتابLeaders Eat Last  نوشته سایمون سینک: این کتاب به اهمیت ایجاد اعتماد در تیم‌ها و سازمان‌ها می‌پردازد.مذاکره:کتاب Never Split the Difference  نوشته کریس واس:  این کتاب، تکنیک‌های یک مذاکره‌کننده حرفه‌ای را برای مذاکره موفقیت‌آمیز در شرایط مختلف بیان می‌کند.کتاب Art of Negotiation  نوشته برایان تریسی: در این کتاب، برایان تریسی استراتژی‌ها و تکنیک‌هایی را برای داشتن یک مذاکره موفق ارائه می‌دهnمهارت‌های نرم کلی:کتاب Soft Skills: The Software Developer&#x27;s Life Manual  نوشته جان سامنز: این کتاب جامع، نکاتی را درباره مهارت‌های غیر فنی لازم برای توسعه‌دهندگان نرم‌افزار ارائه می‌کند. کتابEmotional Intelligence 2.0  نوشته تراویس برادبری و جین گریوز: این کتاب به اهمیت هوش هیجانی در موفقیت‌های فردی و شغلی می‌پردازد.با مطالعه و تمرین مفاهیم ارائه‌شده در این کتاب‌ها، می‌توانید مهارت‌های نرم خود را بهبود بخشیده و در حرفه مهندسی نرم‌افزار پیشرفت بیشتری کنید.منابعی برای افزایش توانایی‌های فنیبرای توسعه‌دهندگان دات‌نت که به دنبال افزایش مهارت‌های فنی خود هستند، منابع متعددی وجود دارد. این بخش شامل سایت‌ها و کتاب‌هایی است که می‌توانند به شما در یادگیری و توسعه بیشتر کمک کنند:سایت باگتو:این سایت یکی از منابع جامع و به‌روز فارسی برای برنامه‌نویسان است که آموزش‌های متنوعی در حوزه‌های مختلف برنامه‌نویسی دات نت ارائه می‌دهد. از مقالات و آموزش‌های این سایت برای آشنایی با ابزارها و فناوری‌های جدید استفاده کنید.سایت‌های خارجی:Microsoft Learn :آموزش‌های رسمی مایکروسافت برای برنامه‌نویسان .NET و دیگر فناوری‌های این شرکت. با دوره‌های رایگان و تمرین‌های تعاملی، به مهارت‌های خود عمق بیشتری ببخشید.Pluralsight :پلتفرمی که دوره‌های آموزشی و ویدیوهای متنوعی درباره برنامه‌نویسی دات‌نت و فناوری‌های دیگر دارد.Udemy :دوره‌های آموزشی متعدد در زمینه برنامه‌نویسی .NET، از مفاهیم پایه تا پیشرفته، به زبان انگلیسی در این سایت در دسترس است.کتاب‌های فنی:Pro ASP.NET Core       نوشته آدام فریمن: یکی از بهترین منابع برای یادگیری توسعه وب با استفاده از ASP.NET Core.C# in Depth  نوشته جان اسکییت: این کتاب یک راهنمای جامع برای یادگیری عمیق زبان برنامه‌نویسی C# است.Programming .NET  نوشته او ریلی: مجموعه‌ای از راهنماها و کتب تخصصی برای برنامه‌نویسان حرفه‌ای که می‌خواهند دانش خود را گسترش دهند.با مطالعه و استفاده از این منابع، می‌توانید به سرعت دانش فنی خود را در حوزه توسعه نرم‌افزار با دات‌نت به‌روز کنید و در بازار کار متمایز شوید.نتیجه‌گیریدر مسیر دستیابی به درآمد بالاتر، ترکیبی از یادگیری مداوم، مهارت‌های فنی و نرم، و درک بازار کار موردنیاز است. شناخت انتظارات کارفرمایان از مهارت‌های موردنیاز، تمرین مذاکره برای حقوق بهتر، و بررسی آگهی‌های استخدامی نشان می‌دهد که چطور می‌توان جایگاه خود را در این صنعت تثبیت کرد. با تعهد به پیشرفت شخصی، مدیریت درست زمان، و همکاری مؤثر با دیگران، فرصت‌های شغلی متعددی در دسترس شما قرار می‌گیرد. اکنون، قدم‌های بعدی را با دقت بردارید و با اراده و پشتکار، آینده حرفه‌ای خود را به سمت موفقیت هدایت کنید.</description>
                <category>باگتو</category>
                <author>باگتو</author>
                <pubDate>Sun, 12 May 2024 14:50:27 +0330</pubDate>
            </item>
                    <item>
                <title>ارتباط بین سرویس ها در معماری میکروسرویس</title>
                <link>https://virgool.io/@bugeto/%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-%D8%A8%DB%8C%D9%86-%D8%B3%D8%B1%D9%88%DB%8C%D8%B3-%D9%87%D8%A7-%D8%AF%D8%B1-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-%D9%85%DB%8C%DA%A9%D8%B1%D9%88%D8%B3%D8%B1%D9%88%DB%8C%D8%B3-om6he17mjile</link>
                <description>در این مقاله قصد داریم که انواع ارتباط بین میکروسیرویس ها و چگونگی برقراری این ارتباطات رو به شما آموزش دهیم. معماری میکروسرویس برخلاف معماری مونولیتیک که بصورت یکپارچه بود دارای سرویس های مختلفی است و این سرویس ها هرچند مستقل از هم هستن ولی نیاز دارند که با هم در ارتباط باشند ما در دوره رایگان آموزش میکروسرویس ارتباط بین میکروسرویس ها را آموزش داده ایم.برای مثال اگر شما بخواهید برای یک فروشگاه نرم افراز بنویسید و از معماری میکروسرویس استفاده کنید این سیستم فروشگاه به زیرسیستم‌های زیر تقسیم می‌شود البته اگر بخواهیم به‌صورت کلی نگاه کنیم در غیر این صورت یک سیستم را می‌توانیم آن‌قدر توسعه دهیم و تقسیم‌بندی کنیم که میکروسرویس‌های آن ده ها یا صدها میکروسرویس را تشکیل دهند اما به طور عمومی یک سیستم فروشگاه به زیرسیستم‌های زیر تقسیم می‌شوند.microserviceاین سرویس‌ها نیاز دارند با یکدیگر در ارتباط باشند اما جدایی از این سرویس‌ها و ارتباط بین آنها یک سیستم میکروسرویس دیگر داریم که لایه UI ما را تشکیل می‌دهد که کاربر ما بتواند از طریق آن از این زیرسیستم‌ها استفاده کند. مثلاً کاربر نهایی نمی‌تواند به‌صورت مستقیم با سرویس محصولات من کار کند، چون سرویس محصولات فقط یک سری API ارائه می‌دهد و یا دیگر سرویس‌ها هم به همین صورت یک سری API ارائه می‌دهند و مخصوص یک نرم‌افزار است و باید یک نرم‌افزار از آنها استفاده کند و به همین منظور ما یک پروژه جدید به جز میکروسرویس‌های تشکیل دهنده یک سیستم باید ایجاد کنیم که به آن لایهٔ UI گفته می‌شود، برای ارتباط کاربر با بقیهٔ سرویس‌ها مانند شکل زیر:uiحالا به جز ارتباط UI با سرویس‌ها خود سرویس‌ها باید با هم ارتباط داشته باشد مثلاً در سبد خرید وقتی می‌خواهیم یک محصول را به سبد خرید اضافه کنیم، یا یک تخفیف را روی سبد خرید اعمال کنیم، باید سرویس سبد خرید با سرویس تخفیف ما ارتباط برقرار کند، و کد تخفیف را بفرستد و چک کند و نتیجه را بیاورد در سبد خرید اعمال کند.یا بعد از اینکه سبد خرید تکمیل شد و میخواهد سفارش را ثبت کند باید سبد خرید با سرویس سفارش ارتباط برقرار کند.سپس خود سرویس‌ها هم با هم ارتباطاتی دارند که ما باید این ارتباطات را برقرار کنیم.و اگر به صورت کلی ما بخواهیم ارتباط بین میکرو سرویس ها را برقرار کنیم دو نوع ارتباط داریم.1)sync  یا synchronous2)async   یا asynchronousارتباط sync  به این صورت است که سرویس مبدأ به‌صورت مستقیم یک API از سرویس مقصد را call  می‌کند و منتظر می‌ماند که Response آن را دریافت کند که استفاده از ارتباط sync در معماری میکرو سرویس‌ها خیلی کم است ولی بعضی وقت‌ها مجبوریم از این ارتباط نیز استفاده کنیم که sync  معایب بالایی دارد، و ارتباط sync به این صورت است که ما API را که سرویس موردنظر ارائه داده، به‌صورت مستقیم از آن استفاده می‌کنیم، مثلاً اگر سرویس سبد خرید با C# پیاده‌سازی شده باشد با Rest sharp می‌توانیم API تخفیف را صدا بزنیم و کد تخفیف را بفرستیم و نتیجه رو دریافت کنیم، در این حالت سرویس سبد خرید باید منتظر بماند که سرویس تخفیف جواب را برای آن ارسال کند و نمی‌تواند کار دیگری انجام دهد و اما در بعضی مواقع نیاز به چنین ارتباطی نداریم و می‌توانیم از ارتباط‌های async استفاده کنیم و این نوع ارتباط به این صورت است که مثلاً سرویس سبد خرید می‌خواهد یک سفارشی را ثبت کند، اطلاعات را برای سرویس سفارش می‌فرستد و دیگر منتظر نمی‌ماند که سرویس سفارش جواب را ارسال کند و به کار خودش ادامه می‌دهد و هر زمانی که سرویس سفارشی کارش تمام شد اطلاعات را برای سرویس سبد خرید ارسال می‌کند.برای ارتباط async باید از پروتکل‌های دیگر استفاده کنیم، و پیاده‌سازی آن کمی سخت تراست.sync یا Synchronous :مابین سرویس‌ها هم می‌توانیم از روش sync استفاده کنیم مثلاً اگر ما بخواهیم بین سرویس سبد خرید و سرویس تخفیف یک ارتباط برقرار کنیم می‌توانیم از روش Synchronous استفاده کنیم و به این صورت است که در سبد خرید کاربر یک کد وارد کرده و ما نیاز داریم به درون سرویس تخفیف برویم و بررسی کنیم که این کد معتبر است یا نه و اگر معتبر بود ما چقدر و یا چه مبلغ باید از این فاکتور یا سبد خرید کسر کنیم پس ما نیاز داریم کد را بفرستیم به سبد، خرید ویک ارتباط باید ایجاد کنیم در اینجا می‌توانیم از ارتباط سینک و یا ای سینک استفاده کنیم. ارتباط Synchronous را می‌توانیم به‌صورت زیر با http/RestFull انجام دهیم. البته روش‌های دیگری هم وجود دارد که مرسوم‌ترین آنها http/RestFull است.ما درخواستمان را برای یک api از سرویس تخفیف ارسال می‌کنیم و سرویس سبد خرید منتظر می‌ماند و کاری نمی‌تواند انجام دهد.یعنی زمانی که کد را وارد کرد و دکمه ثبت تخفیف را زد این درخواست ارسال می‌شود برای سرویس تخفیف و سرویس تخفیف درون دیتابیس خودش جستجو می‌کند و اطلاعات را آورده و اعتبارسنجی‌ها را انجام می‌دهد و کارهای موردنیاز را درون این سرویس انجام می‌دهد،و بعد Response را برای سبد خرید ارسال می‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌کند و به این صورت سبد خرید می‌تواند یک ارتباط بین خودش و سرویس تخفیف ایجاد کند و دیتای مورد نیازش را به دست بیاورد.اما اگر کمی دقت کنید این روش معایبی دارد مثلاً اگر سرویس تخفیف از دسترس خارج شود در آن لحظه سرویس سبد خرید نمی‌تواند کار خودش را ادامه دهد، یک درخواست ارسال کرده و با شکست مواجه شده. پس نمی‌تواند کار خودش را ادامه دهد، اگر سرویس تخفیف برای تکمیل کردن اطلاعات خودش نیاز داشته باشد با سرویس‌های دیگر ارتباط برقرار کند و این ارتباط طولانی شود تمام این زمان باید سرویس سبد خرید منتظر پاسخ از طرف سرویس تخفیف بماند، و پرفورمنس ما کاهش می‌یابد. البته به این نکته توجه داشته باشید که در بعضی موارد ما مجبوریم از این روش (sync) استفاده کنیم. مثلاً در همین سرویس سبد خرید زمانی که کاربر کد خودش را وارد می‌کند و دکمه ثبت کد را می‌زند همان لحظه باید نتیجه را ببیند و نمی‌توانیم آن را منتظر بگذاریم که کدی که وارد کرده معتبر است یا نه در چنین جاهایی ما مجبوریم با همان sync درخواست را بفرستیم و Request را بگیریم و به کاربر نمایش بدهیم .Asyn یا Asynchronous :در این روش سرویس مبدأ منتظر پاسخ سرویس مقصد نمی‌ماند و به کار خودش ادامه می‌دهد و بعد پاسخ برای آن ارسال می‌شود و ما برای پیاده‌سازی روش   Asynchronous می‌توانیم از این سه روش زیر که مهم‌ترین روش‌ها هستند استفاده کنیم:HttpWebhookMessagebrockerHttp: در این روش ما می‌توانیم به‌جای پاسخ  200  پاسخ  202  به درخواست‌کننده بدهیم، و کد 202 به این معنی است که درخواست شما تحویل گرفته شده ولی هنوز در حال پردازش است و می‌توانیم با آن کد یک شناسه نیز به درخواست‌کننده ارسال کنیم که سرویس سبد خرید در بازه‌های زمانی مشخص چک کند که سرویس فرستنده کارش تمام شده است یا نه مانند شکل زیر:و این نیز یک نوع ارتباط Asynchronous که سرویس سبد خرید می‌تواند خیلی سریع Request 202 را بگیرد و به کارش ادامه دهد.Webhook: در این روش مثلاً سرویس سبد خرید یک API از سرویس سفارشی call می‌کند و یک URL هم به سرویس سفارش می‌دهد و می‌گوید زمانی که کارت تمام شد و سفارش را انجام دادی اطلاعات رو به این URL ارسال کن، و خود سرویس سفارش یک URL و یا API  از سرویس سبد خرید را call می‌کند که دیتای موردنظر را برای آن ارسال می‌کند که این هم یک روش از پیاده‌سازی ارتباط Asynchronous است که می‌توانیم از این هم استفاده کنیمMessagebrocker: و اما روش آخر و محبوب‌ترین روش، استفاده از Messagebrockerها یا Eventbus است که در این روش ما یک Eventbus داریم. با یک پل ارتباطی داریم، و تمامی سرویس‌های ما سرویس‌هایی که نیاز دارند به ارتباط یک conection به این Eventbus دارند و هر سرویس که نیاز داشته باشد یک پیغام به سرویس دیگری ارسال کند. آن پیغام را به Eventbus ارسال می‌کند. مانند شکل زیر:EventbusEventbus آن پیغام را به سرویس موردنظر ارسال می‌کند که مزایای خیلی زیادی دارد.  در مقاله Messagebrocker چیست  بیشتر با این روش آشنا شوید. یکی از مهم‌ترین مزیت‌های این روش این است که اگر مثلاً سرویس سبد خرید بخواهد یک سفارش ثبت کند، پیغام خودش را که همان ثبت سفارش است ارسال می‌کند روی Eventbus وقتی که Eventbus می‌خواهد پیغام را به سرویس سفارش بفرستند می‌بیند که سرویس سفارش به هر دلیلی Run نیست، در این حالت پیغام در Eventbus می‌ماند و هر زمانی که سرویس سفارش‌ها Run بشود این پیغام را برای آن ارسال می‌کند، و یکی دیگر از مزیت‌های آن این است که اگر ما بخواهیم یک سرویس را scale کنیم به دلیل اینکه درخواست‌های یک سفارش زیاد شده است به‌راحتی می‌توانیم چند نمونه دیگر از آن سرویس را Run کنیم و هرکدام به Eventbus گوش بدهند و پیغام‌های موردنیاز را بردارند، پس ما نباید تمامی ارتباط بین سرویس‌ها و یا ارتباط بین لایهٔ UI با سرویس‌ها را به‌صورت sync یا مستقیم برقرار کنیم مانند شکل زیر:syncچون در این صورت تمامی قسمت‌های سیستم به یکدیگر وابسته هستند و بسیاری از مزایای معماری میکرو سرویس را از دست می‌دهیم.در معماری میکروسرویس بهتر است سرویس‌های ما که می‌خواهند با هم ارتباط برقرار کنند. با استفاده از Eventbus و یا همان  RabbitMQ یا ابزارهای دیگری که وجود دارد ارتباطشان را برقرار کنند.مگر در مواقعی که مجبور باشیم از sync استفاده کنیم.و همچنین   FrontEnd هم نباید به‌صورت مستقیم با میکروسرویس‌ها در ارتباط باشد و ما باید یک‌لایه اضافه کنیم که به این لایه Apigetway گفته می‌شود که  FrontEnd ما با Apigetway ارتباط برقرار می‌کند برای دریافت داده‌ها Apigetway در خواست FrontEnd را می‌گیرد و بین میکرو سرویس‌هایی که موردنیاز است ارسال می‌کند و Response را جمع‌آوری می‌کند و برای FrontEnd ارسال می‌کند که بهتر است ارتباطات کلی ما در معماری میکروسرویس مانند شکل زیر باشد:</description>
                <category>باگتو</category>
                <author>باگتو</author>
                <pubDate>Sat, 19 Feb 2022 16:37:43 +0330</pubDate>
            </item>
                    <item>
                <title>Message Broker چیست؟</title>
                <link>https://virgool.io/@bugeto/message-broker-teyj52urr2ym</link>
                <description>در این مقاله قصد داریم انواع روش ارتباط بین میکروسروس ها و کلیاتmessage Brokerرا به شما آموزش دهیم.قبل از شروع آموزش بهتر است ابتدا شما را کمی با معماری میکروسرویس آشنا کنم. در معماری میکروسرویس یک سیستم به چند زیرسیستم تقسیم می‌شود که همان میکروسرویس‌ها هستند هر یک از این بخش‌ها یا میکروسرویس‌ها به‌صورت کاملاً مجزا از یکدیگر کار می‌کنند و حتی هرکدام می‌توانند با زبان برنامه‌نویسی خاص خودشان پیاده‌سازی شوند و دیتابیس جداگانه خود را دارند. با این توضیحات باید این سؤال برای شما پیش بیاید که اگر این میکروسرویس‌ها کاملاً از یکدیگر مجزا هستند پس چگونه با یکدیگر تبادل اطلاعات می‌کنند و باهم یک سیستم بزرگ را تشکیل می‌دهند؟در دوره رایگان آموزش میکروسرویس  سایت باگتو  ما به شما آموزش دادیم که میکروسرویس ها به چه صورت با هم در ارتباط هستن. در معماری میکروسرویس برای ارتباط بین میکروسرویس‌ها دو روش وجود دارد:)   روش  Sync2)  روش  asyncدر روش Sync برای ارتباط بین میکروسرویس‌ها می‌توانیم از (rest و http) استفاده کنیم که در این روش باید یک url یا همان Api را از سرویس موردنظر کال کنیم و یک request ارسال کنیم و درون http response خودمان را دریافت کنیم که در این روش از زمانی که request ارسال می‌شود تا زمانی که  response آن دریافت می‌شود سیستم در حالت انتظار می‌ماند.در روش async ما می‌توانیم درخواست خودمان را برای سرویس موردنظر ارسال کنیم و دیگر منتظر پاسخ آن نمانیم و حتی می‌توانیم درخواست‌های متعددی را ارسال کنیم و آنها را درون یک صف بریزیم و به کار خود ادامه دهیم و هر زمان که سرویس موردنظر پاسخ را ارسال کرد آنها را دریافت کنیم.برای اینکه تفاوت روش Sync و async بیشتر برای شما روشن شود یک مثال ساده می‌زنیم:روش asyncفرض کنید که شما به یک رستوران می‌روید و یک غذا سفارش می‌دهید و در حین اینکه غذای شما در حال آماده‌شدن است گارسون سر میزهای دیگر می‌رود و سفارش بقیهٔ مشتری‌ها را می‌گیرد که به این روش async گفته می‌شود.روش syncحالا فرض کنید گارسون سفارش شمارا می‌گیرد و تا زمانی که غذایی که شما سفارش دادید را به دستتان نرساند سراغ بقیه مشتری‌ها نمی‌رود که به این روش sync گفته می‌شود.Message Brokerبرای روش (sync) که در بالا گفتیم از (rest و  http) استفاده می‌کنیم اما برای اینکه ارتباط (async) را برقرار کنیم به (Message Broker) نیاز داریم.در تصاویر زیر چگونگی این دو روش به‌وضوح مشخص است.روش syncدر این روش برای هر ارتباط باید آدرس و  url  مستقیم هر سرویس مشخص باشد و هر دو طرف رابطه باید به یکدیگر دسترسی مستقیم داشته باشند که کاملاً در تصویر بالا مشخص است که چه آشفتگی به وجود می‌آید.روش asyncدر روش async همان‌طور که مشخص است از  Message Broker برای ارتباط بین میکروسرویس‌ها استفاده شده است.تا اینجا توضیحات مقدماتی برای شناخت کلی و کاربرد Message Broker بود که کاربرد اصلی Message Broker رو گفتیم.حال به توضیح بیشتر Message Broker میپردازیم:تعریف Message Broker: مسیج بروکر یک‌لایه ارتباط بین میکروسرویس‌ها است که اگر هرکدام از میکروسرویس‌ها بخواهند پیغامی برای سرویس دیگر بفرستند پیغام خود را روی Message Broker می‌فرستند و گیرنده پیغام خود را ازروی Message Broker دریافت می‌کند.مسیج بروکر صف‌هایی را برای هر سرویس ایجاد می‌کند که پیغام‌ها را می‌توانیم به آن صف ارسال کنیم که اگر گیرنده در دسترس نبود یا به هر دلیلی پاسخ را با تأخیر فرستاد بتواند درخواست‌های دیگر را از صف مربوطه دریافت کند. تعداد صف‌ها در مسیج بروکر نامحدود است.در این روش نیاز نیست که دو طرف ارتباط از آدرس یکدیگر اطلاع داشته باشند و یا به‌صورت مستقیم با یکدیگر ارتباط داشته باشند و تمامی تبادلات از طریق Message Broker انجام می‌شود.Message-Brokerهمانطور که در تصویر بالا مشخص است در این نوع ارتباط سه بخش داریم یک فرستنده یا همان (publisher) یک گیرنده یا همان (Consumer) یک لایه واسط یا همان MessageBroker که در اینجا RabbitMQ استفاده شده است.در این روش فرستنده پیغام خود را برای مسیج بروکر(RabbitMQ)ارسال می‌کند که در قسمت Exchange در RabbitMQ قرار می‌گیرد و وظیفه Exchange است که این پیغام را به کدام صف یا صف‌ها بفرستد یا حتی برای کلیه صف‌ها ارسال کند و گیرنده نیز پیغام را از صف‌هایی که دسترسی دارد دریافت می‌کند و در آخر که پردازش خود را روی پیغام انجام داد به Queue موردنظر اعلام می‌کند که درخواستی که کارش تمام شده است از روی صف حذف کند.برای استفاده از MessageBroker  ابزارها و نرم‌افزارهای بسیاری توسعه داده شده است که ما می‌توانیم از آنها استفاده کنیم. در این مقاله ما چند نمونه از این ابزارها را معرفی می‌کنیم و یکی از مهم‌ترین آنها را توضیح می‌دهیم.انواع نرم‌افزار برای استفاده از مسیج بروکر (MessageBroker):ActiveMQ -1این نرم‌افزار با زبان جاوا توسعه داده شده است و سال‌ها پیش تولیدشده است و تجربه زیادی در این زمینه دارد.Kafka -2این نیز یک مسیج بروکر خوب به‌حساب می‌آید و می‌توانیم از آن هم استفاده کنیم.RabbitMQ -3و اما (RabbitMQ) که امروزه خیلی طرف‌دار دارد ونرم افزار بسیار پرکاربرد خوبی است و این محبوبیت به دلیل سادگی این نرم‌افزار و همچنین مستندات زیادی که برای آن وجود دارد باشد و همچنین ما می‌توانیم به‌راحتی در هر زبان برنامه‌نویسی از آن استفاده کنیم.ابزار های بسیاری دیگر وجود دارند برای پیاده سازی MessageBroker که ما قصد داریم در این مقاله به توضیح  (RabbitMQ) که از محبوبیت بسیاری برخوردار است بپردازیم.قبل از اینکه بخواهیم از (RabbitMQ) استفاده کنیم باید (RabbitMQ-Server) را روی سیستم خود نصب کنیم که برای دانلود آن می‌توانیم وارد سایت:https://www.rabitmq.comبشویم و وارد قسمت Get Started که در تصویر زیر مشخص شده بشویم:وسپس همانطور که در تصویر زیر مشخص شده است روی دکمه دانلود کلیک کنیم:و در صفحه‌ای که مشاهده می‌کنید همان‌طور که در تصویر زیر مشخص شده است در قسمت دایرکت دانلود آخرین نسخه را دانلود کنید:توجه داشته باشید چون (RabbitMQ)با زبان (Erlang)توسعه داده شده است برای اجرای این فایل باید Erlang را قبل از نصب RabbitMQ نصب کنیم تا به Error برخورد نکنیم. برای دانلود erlang به آدرس زیر مراجعه کنید:https://www.erlang.orgهمانند تصویر زیر روی دکمه دانلود کلیک کنید تا به صفحه دانلود بروید:و سپس باتوجه‌به سیستم‌عامل خود یکی از گزینه‌های دانلود را همانند تصویر زیر انتخاب کنید و سپس بعد از دانلود آن را نصب کنید و بعد از نصب erlang حال ربیت ام کیو را نیز نصب کنید:نکته مهم:بعد از نصب (RabbitMQ) شما می‌توانید از منوی استارت روی گزینه RabbitMQService - start که بعد از نصب برای شما اضافه می‌شود همانند تصویر زیر کلیک کنید تا بتوانید از ربیت ام کیو استفاده کنید:و همچنین برای دستورات کامندی می‌توانید از Rabbit MQ Command Prompt استفاده کنید.همانند تصویر زیر:امیدوارم که در این مقاله توانسته باشیم شما را با MessageBroker بحوبی آشنا کرده باشیم، اما اگر میخواهید روی این موضوع مسلط شوید و بصورت کاربردی آنرا یاد بگیرید باید به دوره ستارگان میکروسرویس سایت باگتو مراجعه کنید زیرا در این دوره ما بصورت کاربردی MessageBroker را آموزش داده ایم .</description>
                <category>باگتو</category>
                <author>باگتو</author>
                <pubDate>Mon, 07 Feb 2022 16:32:25 +0330</pubDate>
            </item>
                    <item>
                <title>چه تفاوتی بین معماری میکروسرویس و معماری Soa وجود دارد؟</title>
                <link>https://virgool.io/@bugeto/%DA%86%D9%87-%D8%AA%D9%81%D8%A7%D9%88%D8%AA%DB%8C-%D8%A8%DB%8C%D9%86-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-%D9%85%DB%8C%DA%A9%D8%B1%D9%88%D8%B3%D8%B1%D9%88%DB%8C%D8%B3-%D9%88-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-soa-%D9%88%D8%AC%D9%88%D8%AF-%D8%AF%D8%A7%D8%B1%D8%AF-uuo8jbfjsbk6</link>
                <description>soa vs microservicesاگر در سال‌های گذشته قصد راه‌اندازی یک پروژه نرم‌افزاری را داشتید، برای انتخاب معماری کار سختی در پیش نداشتید چون فقط یک گزینه به نام معماری مونولیتیک وجود داشت که برای تمامی پروژه‌ها از آن استفاده می‌کردیم.البته هنوز هم از معماری مونولیتیک استفاده می‌شود و در بسیاری از پروژه‌ها بهترین انتخاب برای ما می‌تواند همین معماری مونولیتیک باشد.اما امروزه نیاز نرم‌افزارها تغییر کرده. تعداد کاربرانی که از این وب اپلیکیشن استفاده می‌کنند نسبت به 20 سال پیش میلیون‌ها برابر شده است.پروژه‌های بزرگی مثل فیس‌بوک و آمازون و... داریم که روزانه به چندین میلیارد کاربر خدمات ارائه می‌کنند و همین نیازهای جدید باعث شد معماری‌های جدیدی به وجود بیایند که جایگزین معماری مونولیتیک شوند.معماری‌های مثل معماری سرویس‌گراSOAو معماری میکروسرویس(Microservice).برای آشنایی با معماری میکروسرویس و همچنین  تفاوت آن با معماری مونولیتیک حتما دوره رایگان آموزش میکروسرویس رو در سایت باگتو ببینیدشاید با بررسی‌ها که از پروژه خود انجام داده‌اید به این نتیجه رسیده باشید که معماری مونولیتیک برای پروژه شما مناسب نمی‌باشد، و تصمیم گرفته‌اید از یک معماری مدرن که جوابگوی نیازهای شما باشد استفاده کنید.با بررسی‌های که در اینترنت انجام داده‌اید به این نتیجه می‌رسید که دو معماری میکروسرویس و سرویس‌گراSOAمی‌تواند نیازهای شما را برطرف کند، و حالا باید بین این دو بتوانید یک گزینه را انتخاب کنید.در این مقاله تفاوت‌های معماری میکروسرویس و معماری سرویس‌گراSOAرا بررسی می‌کنیم و به شما کمک می‌کنیم به درک درستی از تفاوت‌های معماری میکروسرویس وsoaبرسید که بتوانید انتخاب مناسب‌تری برای معماری پروژه‌های خود داشته باشید.معماری Soaیا سرویس‌گرا چیست؟معماری سرویس‌گرا یا همانSOAبرای رفع مشکلات معماری مونولیتیک ایجاد شد و در این معماری یک پروژه بزرگ یکپارچه که از معماری مونولیتیک استفاده می‌کند را به ماژول‌های مجزایی تقسیم می‌کنیم که هر ماژول خودش یک پروژه مونولیتیک کوچک‌تر است.این ماژول‌ها هرکدام خدمات خاصی را ارائه می‌کنند که بقیه ماژول‌ها می‌توانند از این خدمات استفاده کنند.soaمیکروسرویس چیست؟معماری میکروسرویس بعد از ارائه معماریsoaبه وجود آمد و مزایایی بیشتری نسبت به معماریsoaدارد. می‌توانیم بگوییم که معماری میکروسرویس تکامل‌یافته معماریsoaمی‌باشد که در این معماری ما سرویس‌های بیشتری داریم و خدمات خود را بسیار کوچک‌تر از معماریsoaطراحی می‌کنیم که هرکدام از این سرویس‌ها به‌صورت کاملاً مستقل از هم با دیتابیس اختصاصی خود توسعه داده می‌شوند.معماری میکروسرویس می‌تواند راه کارهای بهتری برایScaleشدن برنامه ارائه بدهد. درمقاله میکروسرویس چیست؟ می‌توانید اطلاعات بیشتری از معماری میکروسرویس مطالعه نمایید.تفاوت میکروسرویس و soaمعماری میکروسرویس وsoaشباهت‌های زیادی با هم دارند. در هر دوی این معماری‌ها پروژه یکپارچه را تقسیم می‌کنیم به بخش‌های کوچک‌تری که این بخش‌های جداگانه خدماتی که به دیگر بخش‌ها ارائه می‌کنند.در هر دوی این معماری‌ها می‌توانیم از کانتینرها و فضای ابری استفاده نماییم که همین باعث می‌شود با راهکارهای مدرن‌تر بتوانیمScaleبرنامه را به‌خوبی انجام دهیم و به کاربران بیشتری بدون افت کیفیت خدمات ارائه کنیم.با این که این دو معماری شباهت‌های زیادی با هم دارند اما تفاوت‌های زیادی هم دارند که دانستن این تفاوت‌ها به شما کمک می‌کند انتخاب بهتری داشته باشیدتفاوت در معماریArcitetureدر معماری میکروسرویس سرویس‌های که توسعه داده می‌شوند بر خدمات واحد تمرکز می‌کنند و این یعنی که در میکروسرویس سرویس‌های ما بسیار کوچک‌تر هستند و به‌صورت مستقل کار می‌کنند و این یعنی باید دیتابیس اختصاصی خود را هم داشته باشند.در سرویس‌های معماری میکروسرویس به دلیل کوچک بودنشان خدمات کمتری هم ارائه می‌دهند. پس در نتیجه ما در معماری میکروسرویس سرویس‌های بسیار بیشتری داریم، به‌عنوان‌مثال در یک پروژه فروشگاهی می‌توانیم یک سرویس برای نمایش پرفروش‌ترین محصولات داشته باشیم و یک سرویس برای نمایش نظرات هر محصول و ...اما در معماریsoaسرویس‌های ما بزرگ‌تر هستند که می‌توانند مستقل از هم نباشند به‌عنوان‌مثال می‌توانیم یک سرویس برای کل حسابداری داشته باشیم، و یا یک سرویس برای کل انبارداری.مرزبندی سرویس‌هامرزبندی و یا تقسیم‌بندی سرویس‌ها در این دو معماری با هم متفاوت است. در معماریsoa معمولاً سرویس‌های بزرگی داریم، سرویس‌های که ساید خودشان در حد یک برنامه مونولیتیک بزرگ باشند.اما در معماری میکروسرویس مرزبندی و یا همان تقسیم‌بندی که برای سرویس‌ها انجام می‌دهیم بسیار کوچک‌ترند.سرویس‌های معماری میکروسرویس این‌قدر باید کوچک باشند که در دوهفته تیم توسعه آن بتواند کامل آن را بازنویسی کند.نحوه ذخیره‌سازی داده‌هادر معماری میکروسرویس هر سرویس دیتابیس اختصاصی خودش را دارد و تمام دیتاهای مورد نیازش را در دیتابیس اختصاصی خود ذخیره می‌کند.به‌عنوان‌مثال در سرویسی که برای سبد خرید ایجاد می‌کنیم نیاز به اطلاعات محصول هم داریم، در این معماری باید تمامی اطلاعات هر محصولی که به سبد خرید اضافه می‌شود را در دیتابیس اختصاصی سرویس سبد خرید ذخیره کنیم که هر بار برای استفاده از آن داده‌ها نیاز نباشد به سرویس محصولات دسترسی داشته باشیم.این نوع نگرش باعث می‌شود در معماری میکروسرویس هر سرویس دیتاهای اختصاصی خاص خود را داشته باشد.اما در معماریsoaبه این صورت نیست و سرویس‌ها می‌توانند دیتاهای اشتراکی بیس سرویس‌های مختلف را استفاده نمایند که خود این نیز مزایای برای ما می‌تواند داشته باشد.حاکمیت در سرویس‌های مختلفدر معماریSOAاز دیتاهای اشتراکی استفاده می‌کنیم و همین باعث می‌شود با حاکمیت و یا قوانینی که برای نحوه ایجاد و استفاده از داده‌ها وضع می‌کنیم برای تمامی سرویس‌ها یکسان باشد چون سرویس‌های مختلف به‌صورت اشتراکی از دیتاهای دیگر سرویس‌ها می‌توانند استفاده کنند.اما در مقابل، معماری میکروسرویس به این صورت نیست. چرا؟ چون هر سرویس کاملاً مستقل از سرویس‌های دیگر می‌باشد و می‌توانیم برای هر سرویس قوانین اختصاصی تعریف کنیم.اندازه دامنهدر معماری میکروسرویس اندازه سرویس‌ها کوچک‌تر می‌باشد و در نتیجه دامنه فعالیت نیز بسیار کوچک‌تر می‌باشد، و ازاین‌رو برای توسعه دهندگان کار بر روی این سرویس لذت‌بخش‌تر می‌باشد. زیرا تیم توسعه هر سرویس به دلیل اندازه کوچک دامنه به‌سرعت تسلط کافی بر دامنه و دانش لازم بیزینس را به دست میاورند و خیلی بهتر می‌توانند سرویس را توسعه بدهند.اما در معماریsoaاندازه و دامنه سرویس‌ها بسیار بزرگ‌تر است و هرچه این اندازه بزرگ‌تر باشد پیچیدگی‌های بیشتر در توسعه برای ما ایجاد می‌کند.ارتباط بین سرویس‌هادر معماریsoaارتباط بین سرویس به طور سنتی توسطESBانجام می‌شود و با استفاده از این روش سرویس‌ها می‌توانند با هم صحبت کنند که خود این یکی از دلایل کند بودن ارتباط در معماری سرویس‌گرا می‌باشد.معماری میکروسرویس از روش‌های ساده‌تری مانندAPIها استفاده می‌کند که باعث افزایش سرعت در ارتباط‌ها می‌شود. استقرار نرم‌افزار یا Deployment استقرار نرم‌افزار یا Deployment استقرار نرم‌افزار در معماری میکروسرویس نسبت به معماریsoaساده‌تر انجام می‌شوددر معماری میکروسرویس سرویس‌ها کوچک و کاملاً مستقل از هم هستند و ما به‌راحتی می‌توانیم بدون آنکه مشکلی برای بقیه سرویس‌ها به وجود بیایید نسخه جدید یک سرویس راDeployکنیم و که دیگر سرویس‌ها بتوانند از آن استفاده کنند.اما در معماریSOAمعمولاًDeployment  پیچیده است چون سرویس‌ها بزرگ هستند و تقریباً می‌توانیم بگوییم همان مشکلاتDeploymentمعماری مونولیتیک را در معماریSOAهم داریم.دسترسی به سرویس‌هامعماری میکروسرویس و معماری سرویس‌گرا از پروتکل‌های مختلفی برای دسترسی به دیگر سرویس‌ها استفاده می‌کنند.معمولاً در معماری سرویس‌گرا پروتکل اصلی که مورداستفاده قرار می گرد پروتکل(SOAP)می‌باشد و البته از پروتکل‌های مانند(AMQP)هم برای ارتباط استفاده می‌شود.اما در معماری میکروسرویس از پروتکلRESTو یا ازGRPCبرای ارتباط‌هایSyncاستفاده می‌شود و از پروتکل‌هایAMQPو دیگر پروتکل‌ها هم برای ارتباط‌هایAsyncاستفاده می‌شود.از معماری میکروسرویس استفاده کنیم یا معماری سرویس‌گراSOA؟soa vs microservicesهر دوی این معماری‌ها رویکردهای برای جداسازی سرویس‌ها از هم را ارائه می‌کنند و این سرویس‌ها را می‌توانیم در فضای ابری و در کانتینرها مستقر کنیم و همین باعث می‌شود بتوانیم ازAuto Scaleدر این معماری‌ها بهره‌مند شویم.این که ما از کدام معماری استفاده کنیم دقیقاً به نیاز آن پروژه بستگی دارد که برای هر پروژه می‌تواند این متفاوت باشد و باتوجه‌به مواردی که در این مقاله بررسی کردیم می‌توانید تصمیم بگیرید از کدام معماری در پروژه خود استفاده نمایید.اگر قصد نیاز به اطلاعات بیشتری برای آشنایی با معماری میکروسرویس و معماریSOAدارید می‌توانید دوره رایگانآموزش میکروسرویسباگتو را مشاهده نمایید.در این دوره شما را با معماری میکروسرویس و چالش‌های آن آشنا می‌کنیم و سپس برای حرفه‌ای شدن در معماری میکروسرویس می‌توانیددوره پیشرفته آموزش میکروسرویس  باگتو را مشاهده نمایید که در این دوره یک پروژه فروشگاهی با معماری میکروسرویس را درAsp.Net Core ارائه می‌کنیم.</description>
                <category>باگتو</category>
                <author>باگتو</author>
                <pubDate>Sun, 19 Dec 2021 11:30:27 +0330</pubDate>
            </item>
                    <item>
                <title>معماری میکروسرویس (Microservice )چیست؟</title>
                <link>https://virgool.io/@bugeto/%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-%D9%85%DB%8C%DA%A9%D8%B1%D9%88%D8%B3%D8%B1%D9%88%DB%8C%D8%B3-microservice-%DA%86%DB%8C%D8%B3%D8%AA-kww985sgebed</link>
                <description>microserviseتا به حال از خود پرسیده اید فیس بوک چطور به چند میلیارد کاربر خدمات ارائه میکند؟روزانه چند میلیارد استوری در اینستاگرام به اشتراک گذاشته می شود؟ چند میلیارد لایک در اینستاگرام ثبت می شود؟و یا حتی در پروژه های داخل کشور هم اگر بررسی  کنیم پروژه های بزرگی وجود دارد که دارند به کاربران میلیونی خدمات ارائه می دهند. تصور کنید بازی استقلال و پرسپولیس در روز غیر تعطیل و ساعت 14:00 برگذار شود، به نظر شما چند میلیون نفر از طریق اینترنت و آنلاین این بازی را مشاهده می کنند؟و یا در بلک فرایدی دیجی کالا روزانه چند میلیون بازدید کننده دارد؟ و چند هزار ثبت سفارش دارد؟اگر بررسی  کنیم این اعداد خیلی بالاست. به نظر شما با همان معماری سنتی و مونولیتیکی که تا به حال استفاده می کرده ایم میتوانیم به این نیازها پاسخ بدهیم؟خیر، اگر فیس بوک ، اوبر و دیگر بزرگان صنعت نرم افزار می توانستند با همان معماری سنتی و مونولیتیک در این حد بزرگ شوند هیچ وقت معماری میکروسرویس به وجود نمی آمد.اگر قصد دارید نرم افزاری توسعه بدهید که بتواند به میلیون ها کاربر خدمات ارائه کند. پیش نیازهای دارید که معماری مونولیتیک نمی تواند آن نیازهای شما را به خوبی رفع کند و باید از معماری میکروسرویس استفاده کنید.اگر با معماری میکروسرویس آشنا نیستید توصیه می کنیم دوره رایگان آموزش میکروسرویس را در سایت باگتو مشاهده نمایید در این دوره بصورت کامل و جامع معماری میکروسرویس را تعریف کردیم و تمام ابعاد آن را بیان کردیم.میکروسرویس چیست؟microserviceمیکروسرویس یک معماری جدید برای توسعه نرم افزار می باشد. در این معماری نرم افزار را به بخش های کوچک و مستقلی تقسیم می کنیم که هر کدام از این سرویس ها دیتابیس اختصاصی خود را دارند و از طریق api  و یا Message broker ها با هم ارتباط برقرار می کنند.microservicesچون ما نرم افزار  بزرگ را تقسیم می کنیم به بخش های کوچک تری ، Scale و توسعه نرم افزار هم ساده تر انجام می شود. و اگر بخشی از نرم افزار دچار اختلال شود برای دیگر بخش ها مشکلی به وجود نمی آید.برای درک بهتر موضوع تصور کنید یک پروژه نرم افزاری فروشگاه آنلاین موبایل داریم. اگر بخواهیم این پروژه را تبدیل به معماری میکروسرویس کنیم می توانیم تقسیم بندی هایی انجام دهیم و این پروژه را به چند بخش کاملا مجزا تبدیل کنیم.به عنوان مثال برای پروژه فروشگاه آنلاین موبایل میتوانیم سرویس های زیر را داشته باشیم:1-    سرویس محصولاتدر این سرویس مدیریت محصولات و نمایش اطلاعات هر محصول در سایت را پیاده سازی  می کنیم2-    سرویس سبد خریددر این سرویس Api های مورد نیاز برای ایجاد سبد خرید را پیاده سازی می کنیم.3-    سرویس تخفیفدر این سرویس Api های مورد نیاز برای مدیریت کدهای تخفیف و اعمال کد تخفیف بر روی سبد خرید را پیاده سازی می کنیم4-    سرویس سفارشدر این سرویس Api ها مربوط به مدیریت سفارشات و فرایند های مورد نیاز برای ثبت سفارش را پیاده سازی  می کنیمهر کدام از این سرویس ها کاملا مستقل از هم توسعه داده می شوند. می توانند تیم اختصاصی خود را داشته باشند.هرکدام می توانند زبان برنامه نویسی اختصاصی خود را داشته باشندهر کدام از سرویس ها باید دیتابیس اختصاصی  خود را داشته باشند و نباید یک دیتابیس مشترک بین همه سرویس ها ایجاد کنیم.چون سرویس ها جدای از هم هستند می توانند به صورت مستقل از هم توسعه داده بشوند.هر کدام از سرویس ها می توانند به صورت مستقل Scale شوند.میکروسرویس یک اصطلاح تقریباً جدیدی است که وارد دنیای معماری نرم‌افزار شده است و بسیاری از مهندسین نرم‌افزار هنوز از این معماری استفاده نمی‌کنند. ما در چند سال اخیر مشاهده می‌کنیم این سبک از معماری به یک سبک پیش‌فرض برای ساخت برنامه‌های سازمانی تبدیل شده است.  در پروژه های داخل ایران هم داریم میبینیم که خیلی از پروژه ها از معماری میکروسرویس استفاده می کنند.متأسفانه، اطلاعات زیادی وجود ندارد که نشان دهد سبک معماری میکروسرویس چیست و چگونه باید آن را انجام دهند تا دیگران کاملاً واضح از مزایای این معماری مطلع شوند تا بتوانند از مزایای این معماری بهره ببرند و در پروژه های خود استفاده کنند.ما در دوره رایگان آموزش میکروسرویس این معماری را به‌صورت کامل آموزش داده‌ایم شما در این دوره یک دید کلی و بسیار جامع از این معماری به دست می‌آورید و بعد در دوره پیشرفته آموزش میکروسرویس که با عنوان دوره ستارگان میکروسرویس در سایت قرار دارد نحوه پیاده‌سازی معماری میکروسرویس در Asp.net Core را آموزش می‌بینید. برای اینکه مفهوم معماری میکروسرویس برای شما بهتر جا بی افتد ابتدا لازم است با معماری یکپارچه یا مونولتیک آشنا شوید.معماری مونولتیکمعماری مونولتیک یک برنامه یکپارچه است که تمامی مواردنیاز پروژه به‌صورت یکپارچه کنار هم قرار می‌گیرد و توسعه داده می‌شود و درنهایت به دست مشتری می‌رسد.این معماری داری ۳ بخش مجزا است( اینجام اون تصویر سه لایه )1-    User interface  این بخش که  ui  پروژه است که با استفاده از html ,css نوشته می‌شود  و یا ممکن است خروجی web APIها باشد که با JSON  و یا XML نوشته شده باشد و در اختیار کاربر نهایی قرار می‌گیرد.2-    Business logiceدر این بخش از منطق تجاری برنامه پیاده‌سازی می‌شود 3-    Data Base Access4-    وظیفه این لایه ایجاد ارتباط با دیتابیس است، و کار ذخیره و بازیابی داده در دیتابیس را بر عهده دارد این لایه توسط لایه Business logice مورداستفاده قرار می‌گیرد.monolithicnolotic​?با گذشت زمان، حفظ یک ساختار ماژولار خوب اغلب دشوار است، و حفظ تغییراتی که فقط باید روی یک ماژول در آن ماژول تأثیر بگذارد، سخت‌تر می‌شود و scale  کردن به جای بخشی از آن که به منابع بیشتری نیاز دارد، به مقیاس بندی کل برنامه نیاز دارد.این ناامیدی‌ها از معماری مونولتیک منجر به پیدایش سبک معماری میکروسرویس شده است با معماری میکروسرویس برنامه‌هایی کاربردی به‌عنوان یک مجموعه خدمات را می‌توانیم ایجاد کنیم علاوه بر این که سرویس‌ها به طور مستقل قابل استقرار و مقیاس‌پذیری هستند، هر سرویس همچنین یک مرز ماژول ثابت هم دارد، حتی اجازه می‌دهد تا سرویس‌های مختلف به زبان‌های برنامه‌نویسی مختلف نوشته شوند. آنها همچنین می‌توانند توسط تیم‌های مختلف مدیریت شوندمعماری Microservices هر یک از عملکردهای یک برنامه کاربردی را به‌عنوان یک سرویس مستقل در نظر می‌گیرد که می‌تواند تغییر، به‌روز یا حذف شود بدون اینکه بر بقیه برنامه تأثیر بگذارد. برنامه‌ها به طور سنتی به‌عنوان نرم‌افزارهای یکپارچه ساخته می‌شدند. افزودن ویژگی‌های جدید نیازمند پیکربندی مجدد و به‌روزرسانی همه چیز از فرایند و ارتباطات گرفته تا امنیت در برنامه است. برنامه‌های کاربردی یکپارچه سنتی دارای چرخه عمر طولانی هستند، به‌ندرت به‌روز می‌شوند و تغییرات معمولاً بر کل برنامه تأثیر می‌گذارد. این فرایند پرهزینه و دست‌وپاگیر پیشرفت و به‌روزرسانی در توسعه برنامه‌های کاربردی سازمانی را به تأخیر می‌اندازد. معماری میکروسرویس برای حل این مشکل طراحی شده است. همه سرویس‌ها به‌صورت جداگانه ایجاد می‌شوند و به طور جداگانه از یکدیگر مستقر می‌شوند. این سبک معماری امکان مقیاس‌بندی خدمات را بر اساس نیازهای تجاری خاص فراهم می‌کند. سرویس‌ها را می‌توان به‌سرعت بدون تأثیرگذاری بر سایر بخش‌های برنامه تغییر داد. تحویل مداوم یکی از مزایای میکروسرویس‌ها است. معماری میکروسرویس دارای ویژگی‌های زیر است:  •    برنامه به اجزای ماژولار و آزادانه تقسیم می‌شود •    برنامه را می‌توان در مراکز داده توزیع کرد. •    برای افزودن ویژگی‌های جدید فقط باید آن سرویس‌های مربوطه به‌روزرسانی شود•    سرویس‌های شبکه باید به‌صورت نرم‌افزاری تعریف شده و به‌صورت فابریک برای اتصال هر میکروسرویس اجرا شونداستفاده از میکرو سرویس‌ها برای ما مزایای زیادی دارد که در اینجا به چند مورد از آنها اشاره می‌کنم.مزایای معماری میکروسرویس:1-    محدود به یک تکنولوژی نیستند2-    ساختار مناسبی برای scale  دارند3-    Deployment ساده4-    قابلیت جایگزینی5-    تحویل سریع فیچر به مارکت6-    داشتن تیم با بهره‌وری بالااستفاده از میکروسرویس‌ها چالش‌های مخصوص به خودش را دارد که با مدیریت آنها می‌توانید به بهترین شکل از آنها بهره ببرید.​در مقاله مزایا و معایب میکروسرویس ها بصورت مفصل تر به این موضوع پرداخته ایم.چه زمانی از میکروسرویس‌ها استفاده کنیم؟در نهایت، هر شرکت بزرگی می‌تواند در استفاده از معماری میکروسرویس‌ها سود ببرد، اگر برنامه‌هایی داشته باشد که نیاز به به‌روزرسانی‌های مکرر دارند، الگوهای ترافیکی پویا را دارند می‌توانند از این معماری استفاده کنند.مرزبندی سرویس‌ها در معماری میکروسرویس بر چه اساسی صورت می‌گیرد؟چون هر پروژه و هر برنامه‌ای که طراحی و پیاده‌سازی می‌شود با هم متفاوت است معیار مشخص و خط‌کشی‌شده‌ای وجود ندارد که ما از آن استفاده کنیم و همه سرویس‌ها را بر آن اساس مرزبندی کنیم.1-    ما باید مرزبندی میکروسرویس‌ها را بر مبنای اتصال سست (lose coupling) قرار بدهیم  یعنی تغییرات در یک سرویس نیاز به تغییر در سرویس‌های دیگر نباشد.2-    در طراحی سرویس‌ها باید به سمت high cohesion حرکت کنیم.این به چه معناست؟ در high cohesion عملیات‌ها و رفتارهای مرتبط رو در کنار هم قرار دهیم این کار باعث می‌شود برای یک عملیات خاص چندین سرویس درگیر نشوند زیرا وقت زیادی از تیم می‌گیرد و در هنگام انتشار بر روی سرور باید چندین سرویس را deploy کنیم و بسیاری از مزیت‌های میکروسرویس‌ها رو از دست می‌دهیم. 3-     استفاده از مفهوم bounded context  مفهوم bounded context که یکی از بخش‌های ddd  است که توسط اریک ایوانز ارائه شد است.با استفاده از این مفهوم ما فضای مسئله که یک فضای بزرگ است رو به مفاهیم کوچک‌تر تقسیم می‌کنیم که راحت‌تر بتونیم برنامه رو جلو ببریم.خصوصیاتی که هر bounded context باید داشته باشد که بتوان به‌عنوان یک مفهوم مستقل آن را جدا کنیم.    مستقل باشد     تکنولوژی‌ها و معماری‌های خاص خودش را داشته باشد    دیتابیس اختصاصی داشته باشد    تیم برنامه‌نویسی مخصوص به خودش را داشته باشد این خصوصیات که برای bounded contextها ارائه شده است تقریباً همان خصوصیاتی هستند که برای سرویس‌ها می‌توانیم در نظر بگیریم، بنابراین می‌توانیم هر bounded context را در یک سرویس قرار دهیم.جداکردن سرویس‌ها و مشخص‌کردن مرز بین آنها کار ساده‌ای نیست شما باید زمان زیادی صرف کنید تا بتوانید به‌خوبی سرویس‌ها را از هم جدا کنید زیرا درست انجام‌دادن این کار روند کار شما را در آینده تسریع می‌بخشد و باعث می‌شود مشکلات کمتری پیش بیاید و بعداً مجبور نباشید که دوباره این مرزها را تغییر دهید.چه کسانی از میکروسرویس‌ها استفاده می‌کنند؟شرکت‌های رسانه‌های اجتماعی مانند فیس‌بوک و توییتر آمازون، ارائه‌دهنده رسانه‌ای مانند نتفلیکس، خدمات تاکسی آنلاین مانند Uber و Lyft، و بسیاری از بزرگ‌ترین شرکت‌های خدمات مالی جهان، همگی از میکروسرویس‌ها استفاده می‌کنند. این روند باعث شده است که شرکت‌ها از معماری یکپارچه به برنامه‌های کاربردی میکروسرویس حرکت کنند، استانداردهای جدیدی را برای فناوری کانتینر تعیین کنند و مزایای استفاده از این طرح معماری را اثبات کنند.در ایران نیز شرکت های بزرگ مانند دیجی‌کالا، اسنپ، ورزش 3 و ...، از معماری میکروسرویس استفاده می‌کنند.میکروسرویس‌ها چگونه Scale می‌شوند؟معماری میکروسرویس به سازمان‌ها اجازه می‌دهند تا برنامه‌ها را به حوزه‌های جداگانه‌ای که توسط گروه‌های جداگانه مدیریت می‌شوند، تقسیم کنند. این نوع از معماری برای ساخت برنامه‌های کاربردی با مقیاس بالا است. این مورد یکی از دلایل اساسی روی‌آوردن کسب‌وکارها به ابر عمومی برای ارائه برنامه‌های میکروسرویس است، زیرا زیرساخت‌های اولیه برای برنامه‌های یکپارچه قدیمی بهینه‌تر شده است، اگرچه لزوماً این‌طور نیست. نسل جدیدی از فروشندگان فناوری تصمیم گرفتند تا برای هر دو راه‌حل ارائه دهند. تفکیک مسئولیت‌های کار مستقل را روی خدمات فردی تقویت می‌کند که تأثیری بر توسعه دهندگان در گروه‌های دیگر که روی همان برنامه کار می‌کنند، ندارد.</description>
                <category>باگتو</category>
                <author>باگتو</author>
                <pubDate>Thu, 16 Dec 2021 14:51:09 +0330</pubDate>
            </item>
                    <item>
                <title>استفاده از داکر چه مزیت‌هایی برای معماری میکروسرویس دارد؟</title>
                <link>https://virgool.io/@bugeto/%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%AF%D8%A7%DA%A9%D8%B1-%DA%86%D9%87-%D9%85%D8%B2%DB%8C%D8%AA-%D9%87%D8%A7%DB%8C%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-%D9%85%DB%8C%DA%A9%D8%B1%D9%88%D8%B3%D8%B1%D9%88%DB%8C%D8%B3-%D8%AF%D8%A7%D8%B1%D8%AF-lihwek2pg2cy</link>
                <description>DOCKERهرجا سخنی از معماری میکروسرویس می‌شود نام داکر و یا کانتینرها را هم می‌شنویمچرا داکر در کنار میکروسرویس استفاده می‌شود؟در این مقاله مزیت‌های که استفاده از  داکر به معماری میکروسرویس اضافه می کند را بررسی می‌کنیماگر بامعماری میکروسرویس‌ها آشنایی ندارید توصیه می‌کنم دوره رایگان آموزش میکروسرویس‌ سایت باگتو را مشاهده نمایید.microseviseمعماری میکروسرویس یکی از مدرن‌ترین و جدیدترین معماری‌های نرم‌افزار است که به‌تازگی وارد دنیای معماری نرم‌افزار شده است و روزبه‌روز شاهد رشد بیشتر این معماری هستیمدر حال حاضر می‌بینیم که پروژه‌های بزرگ دنیا مثل netflix ,uber ... و یا حتی پروژه‌های بزرگ داخل کشور از معماری میکروسرویس برای برطرف‌کردن مشکلات خود استفاده کرده‌اند.اگر پروژه‌های که از معماری میکروسرویس استفاده کرده‌اند را بررسی کنیم متوجه می‌شویم که این معماری در پروژه‌های بزرگ استفاده می‌شود و در پروژه‌های کوچک شاید هیچ مزیتی نداشته باشد و دردسرهای زیادی هم برای ما ایجاد کند.در ادامه با داکر آشنا می‌شویم و بعد بررسی می‌کنیم که داکر چه قابلیت‌هایی به معماری میکروسرویس اضافه می‌کند.ما در دوره پیشرفته  آموزش asp در فصل هفدهم داکر و بصورت کامل آموزش داده ایم برای یادگیری داکر به  دوره ستارگان asp.net core  مراجعه کنید.در ادامه با داکر آشنا می‌شویم و بعد بررسی می‌کنیم که داکر چه قابلیت‌هایی به معماری میکروسرویس اضافه می‌کند.microserviseچرا اپلیکیشن ما نیاز به یک محیط ایزوله دارد؟وب اپلیکیشنی که ما توسعه می‌دهیم باید در یک محیط کاملاً ایزوله اجرا شود. منظور از ایزوله این است که تمامی منابع در اختیار اپلیکیشن ما باشد و اپلیکیشن‌های دیگری در آن محیط در حال اجرا نباشند. به‌عنوان‌مثال فرض کنید شما درحال‌توسعه وب  اپلیکیشن خود هستید و مجبورید دو نسخه مختلف از این اپلیکیشن را تست کنید.هرکدام از نسخه نیازمندی‌های خاص خود را دارند که باید بر روی سیستم‌عامل سرور نصب شوند و اگر شما هر دو نسخه را بر روی یک سرور مستقر کنید ممکن است این اختلاف ورژن نیازمندی‌ها یا کتابخانه‌ها برای شما دردسر ایجاد کند.و یا تصور کنید درحال‌توسعه اپلیکیشن با معماری میکروسرویس هستید و یکی از سرویس‌های شما نیاز دارد بر روی سرور ویندوزی اجرا شود و یکی دیگر نیاز دارد بر روی سرور لینوکسی اجرا شود.و حتی اگر اجرای چند اپلیکیشن در یک سرور از نظر اجرا شدن مشکلی نداشته باشند، این اپلیکیشن‌ها می‌توانند بر روی‌هم تأثیر بگذارند و مشکل در یک اپلیکیشن بر روی دیگری تأثیر بگذارد و باعث شود بقیه اپلیکیشن‌های روی این سرور هم نتوانند خدمات خود را ارائه دهند.به همین دلایل در معماری میکروسرویس بهتر است که هر سرویس را در محیطی کاملاً ایزوله اجرا کنیم.انواع محیط ایزوله که می‌توانیم استفاده کنیم1-Bare-MetalBare-Metalبا استفاده از bare metal  شما یک سرور با منابع بالا را در اختیار دارید که می‌توانید اپلیکیشن خود را بر روی آن مستقر کنید. این نوع سرورها معمولاً دارای منابع زیادی می‌باشند و به همین دلیل ماهیانه  باید هزینه زیادی برای این نوع سرورها پرداخت کنید.و اگر قرار باشد برای معماری میکروسرویس که از صدها میکرو اپلیکیشن ایجاد شده است از این نوع سرورها استفاده کنید ماهیانه هزینه بسیار زیادی باید برای سرورها پرداخت کنید که اصلاً مقرون‌به‌صرفه نیست.2-Virtual MachineVirtual Machineبا استفاده از VM و یا همان ماشین مجازی می‌توانیم محیط‌های ایزوله متعددی بر روی یک سرور Bare-Metal ایجاد کنیم.روش کار به این صورت است که ما روی یک‌لایه سیستم‌عامل با استفاده از نرم‌افزارهای مجازی سیستم‌عامل‌های دیگری را نصب می‌کنیم که درصدی از منابع سرور اصلی را به آن اختصاص می‌دهیم و به همین صورت می‌توانیم محیط‌های مجازی ایزوله‌ای داشته باشیم.راه‌اندازی یک VM چندین دقیقه طول می‌کشد و شاید برای مقیاس‌پذیری در معماری میکروسرویس‌ها مناسب نباشد.3-ContainerContainerکانتینر یک‌بخشی از سیستم‌عامل می‌باشد که یک محیط ایزوله برای اجرا شدن اپلیکیشن‌ها در اختیار ما قرار می‌دهد. مفهوم Container از مدت‌ها قبل درون سیستم‌عامل لینوکس وجود داشت و بعدها به سیستم‌عامل‌های دیگر مثل ویندوز هم اضافه شد.ما با استفاده از Containerهای که سیستم‌عامل در اختیارمان قرار داده است می‌توانیم اپلیکیشن‌های خودمان را در محیطی کاملاً ایزوله اجرا کنیم. اجرا شدن یک کانتینر معمولاً چند ثانیه طول می‌کشد و بهترین گزینه برای مقیاس‌پذیری معماری میکروسرویس‌ها می‌باشد.داکر چیست؟اجرا شدن یک کانتینر معمولاً چند ثانیه طول می‌کشد و بهترین گزینه برای مقیاس‌پذیری معماری میکروسرویس‌ها می‌باشد.با مفهوم Containerها آشنا شدیم آنها یک محیط کاملاً ایزوله از سیستم‌عامل را برای اجرا شدن اپلیکیشن‌ها در اختیار ما قرار می‌دهند.اما مدیریت و کارکردن با Containerها کار پیچیده‌ای است  و شاید ما به‌راحتی نتوانیم از این Containerها استفاده کنیم. به یک ابزار قدرتمند نیاز داریم که بتوانیم Containerها را مدیریت کنیم و داکر یکی از ابزارهایی می‌باشد که برای مدیریت Containerهای سیستم‌عامل ایجاد شده است.پس داکر فقط یک نرم‌افزار برای ایجاد، حذف  و ویرایش، و مدیریت Containerها می‌باشد البته امکانات بیشتری در اختیار ما قرار می‌دهد که در دوره‌ها و مقالات دیگر باگتو به آموزش کامل داکر می‌پردازیم.مزیت‌های استفاده از داکر برای معماری میکروسرویس کدام‌اند؟در معماری میکروسرویس  پروژه را تقسیم می‌کنیم به سرویس‌های کوچک و مستقل از هم که هرکدام می‌توانند با زبان برنامه‌نویسی مستقلی توسعه داده شوند و هر سرویس نیز دیتابیس اختصاصی خود را دارد.پس در معماری میکروسرویسی نیاز داریم هرکدام از سرویس‌ها را در محیطی ایزوله اجرا کنیم و برای  Scale برنامه هم باید بتوانیم خیلی سریع نسخه‌های متعددی از هر سرویس را اجرا کنیم.با بررسی شرایط معماری میکروسرویس از بین سه محیط ایزوله‌ای که بررسی کردیم بهترین گزینه استفاده از Containerها می‌باشد و برای مدیریت Containerها هم بهترین گزینه موجود ابزار Docker می‌باشد و به همین دلیل است که همیشه در کنار معماری میکروسرویس‌ها از داکر و Container هم استفاده می‌شود.در ادامه مزیت‌های استفاده از داکر را بیان می کنیم :•    اجرای سریعاجرای Containerها یک فرایند سیستم عاملی است و یک Container در عرض ثانیه اجرا می‌شود. این در حالی است که راه‌اندازی یک VM ممکن است چندین دقیقه طول بکشد.•    استقرار با سرعت بیشتراستقرار اپلیکیشن‌ها در Containerهای داکر خیلی سریع انجام می‌شود چون همه نیازمندی‌ها در یک image بسته‌بندی‌شده‌اند و برای اجرا، فقط کافی است آن image  را بارگذاری و اجرا کنیم.•    مدیریت ساده Containerهامدیریت Containerهای سیستم‌عامل کار پیچیده‌ای است و داکر این کار پیچیده را برای ما راحت کرده است و با استفاده از داکر مدیرت Containerها به سادگی انجام می‌شود.•    مقیاس‌پذیریاگر Containerهای شما محدود به چند عدد باشند و همه آنها روی یک سیستم‌عامل باشند مدیریت آنها شاید کار سختی نباشد. اما اگر شما صدها Container داشته باشید و آن‌ها روی سرورها و سیستم‌عامل‌های مختلفی باشند مدیریت آن‌ها واقعاً کار سخت و پیچیده‌ای می‌شود. با استفاده از Docker Swarm می‌توانیم تعداد زیادی Container روی سرورهای مختلف را مدیریت کنیم و به‌راحتی بتوانیم Scale Out  معماری میکروسرویس را انجام دهیم.•    پشتیبانی از سیستم‌عامل‌های مختلفدر سیستم‌عامل‌های لینوکس، ویندوز و مک مفهوم Container را داریم و با استفاده از داکر می‌توانیم container سیستم‌عامل‌های مختلف را مدیریت کنیم و محدود به یک سیستم‌عامل نیستیم.نتیجه‌گیریدر معماری میکروسرویس ما ده‌ها اپلیکیشن جدا از هم داریم که کاملاً به‌صورت مستقل می‌توانند اجرا شوند در نتیجه ارتباط بین این اپلیکیشن‌های مستقل می‌توانیم اپلیکیشن بزرگ را داشته باشیم.در معماری میکروسرویس چون تعداد سرویس‌ها زیاد می‌باشند ما به  بحث Auto Scale هم نیاز داریم استفاده از VM نمی‌تواند گزینه مناسبی باشد و بهتر است که از Containerها برای محیط اجرای سرویس‌های خود استفاده کنیم.برای اینکه در بحث  آموزش میکروسرویس حرفه ای شوید می توانید دوره ستارگان میکروسرویس سایت باگتو رو مشاهده کنید.</description>
                <category>باگتو</category>
                <author>باگتو</author>
                <pubDate>Sun, 05 Dec 2021 12:18:01 +0330</pubDate>
            </item>
                    <item>
                <title>کدام دیزاین پترن ها در برنامه نویسی معروف هستند؟</title>
                <link>https://virgool.io/@bugeto/httpsbugetonetblogwhat-is-design-pattern-csyrwkfhnw7a</link>
                <description>در مقاله دیزاین پترن چیست با دیزاین پترن ها آشنا شدیم، و در این مقاله معروفترین و پرکاربردترین دیزاین پترن هایGOF  را به شما معرفی می کنیم.تعداد 23 دیزاین پترن در سه دسته بندی ساختاری، ایجادی، رفتاری معرفی شدند. اما به ندرت پیش می آید که در یک پروژه از اکثر این دیزاین پترن ها با هم استفاده کنیم.تعدادی از این دیزاین پترن ها کاربرد های خاصی دارند که کمتر استفاده می شوند و شاید شما هیچوقت تعدادی از این دیزاین پترن ها را استفاده نکنید. اما در مقابل تعدادی دیگر از این دیزاین پترن ها بشدت پرکاربرد هستند و شاید در اکثر پروژه ها مجبور باشید از این دیزاین پترن ها استفاده کنید.تمام 23 دیزاین پترن بصورت کامل در دوره آموزش دیزاین پترن ها در سایت ارائه شده است.در ادامه 7 دیزاین پترن معروف و پرکاربرد را به شما معرفی می کنیم.1- دیزاین پترن FacadeFacadeالگوی Facade  یا نمای بیرونی در دسته الگوی های ساختاری  (Structural Patterns) قرار دارد.الگوی facade  به عنوان یک واسط بین زیرسیستم ها و کلاینت قرار دارد.Facade یک واسط سطح بالایی را تعریف می کند که استفاده از زیرسیستم را آسان تر می کند. به عبارت دیگر خلاصه سازی، و متمرکز سازی واسط یک سیستم شلوغ و پیچیده متشکل از تعداد زیادی کلاس و زیر سیستم به یک واسط سبک، ساده و سطح بالا.به اینصورت با استفاده از الگوی Facade  ارتباط ساب سیستم ها  با کلاینت قطع میشه و ارتباط سست بین اونها برقرار میشه.2- دیزاین پترن AdapterAdapterدیزاین پترن آداپتر  یک دیزاین پترن از نوع ساختاری است.  با استفاده از این دیزاین پترن ما میتوانیم از کلاس هایی که واسط متفاوتی با برنامه ما دارند استفاده کنیم، یعنی به دو رابط ناسازگار اجازه می‌دهد تا بتوانند با هم کار کنند.3-  دیزاین پترن Factory Method Factory Methodالگوی طراحی کارخانه در دسته  الگوهای سازنده قرار دارد و به شما در مدیریت ایجاد اشیا کمک می‌کند. این الگوی طراحی، راهکاری در اختیار برنامه نویسان قرار می‌دهد تا آن‌ها را قادر سازد که بدون اینکه کلاس دقیق یک شی را مشخص کنند آن را ایجاد کنند و به استفاده از آن بپردازند. دیزاین پترن Factory با ایجاد اشیاء  بدون مشخص‌کردن کلاس اشیاء خاصی که قرار است ساخته شوند ایجاد شده است.4- دیزاین پترن IteratorIteratorاین دیزاین پترن یکی از قدیمی ترین الگوها است وکار این الگو پیمایش لیستی از اشیاء است بدون نیاز به افشاءکردن کل مجموعه.زمانی که ما مجموعه ای از اشیاءرو در کنار هم قرار می دهیم باید نحوی پیمایش را مشخص کنیم که کلاینت ما بتوتند به راحتی آن را پیمایش کند وپردازش مورد نیازش را انجام بدهد. در iteration ما نیاز به ساختاری داریم که object فعلی رو نگهداریم و در عین حال بدا نیم object بعدی یا قبلی (و نه کل مجموعه) چیه. در حقیقت Iterator زمانی استفاده میشود که میخواهیم در چرخه یا روند به اجزای یک مجموعه دسترسی داشته باشیم.5- دیزاین پترن strategystrategyاین الگوی یکی از پرکاربردترین دیزاین پترن ها است و این امکان را می دهد که ما بتوانیم الگوریتم های دینامیک را درون یک کلاس بفرستیم.الگوی strategy این امکان را می‌دهد تا الگوریتم ها بر اساس موقعیت و شرایط متفاوت تغییر کنند.در این الگو خانواده‌ای از الگوریتم ها را تعریف می‌کنیم و هر یک را در کلاس جداگانه و مستقل قرار می‌دهیم تا قابل انتخاب یا تعویض باشند.6- دیزاین پترن CompositeCompositeالگوی Composite کمک میکند تا بتونیم اشیاء را بصورت سلسله مراتبی یا ساختار درختی داشته باشیم. این الگو اجازه میدهد تا  بتونیم ساختار درختی داشته باشیم و بتوانیم به هر عضو از درخت تسکی بدهیم. در حقیقت وقتی میخواهیم با گروهی از اشیاء کار داشته باشیم یا آنها را یک شئ واحد ببینیم این الگو کبه ما کمک می کند.7-  دیزاین پترن DecoratorDecoratorالگوی  Decorator یا آذینگرالگویی است که کمک میکنه که بدون تغییر در ساختار یه شئ، بتوانیم تغییراتی اعمال و یا عملکردی به آن اضافه کنیم.این الگو به ما کمک میکند که بصورت داینامیک، عملکردها و رفتارهایی رو که میخواهیم به یک شئ اعمال کنیم، بدون اینکه به ساختار کلاس و سایر اشیائ ساخته شده از همان کلاس کاری داشته باشیم.  در این مقاله به  هفت تا از معروف ترین الگوهای طراحی که در برنامه نویسی بیشترین استفاده را دارند پرداختیم .</description>
                <category>باگتو</category>
                <author>باگتو</author>
                <pubDate>Sat, 04 Dec 2021 17:02:15 +0330</pubDate>
            </item>
                    <item>
                <title>دیزاین پترن چیست؟</title>
                <link>https://virgool.io/@bugeto/%D8%AF%DB%8C%D8%B2%D8%A7%DB%8C%D9%86-%D9%BE%D8%AA%D8%B1%D9%86-%DA%86%DB%8C%D8%B3%D8%AA-c6z78n8kdrtz</link>
                <description>design-patternsاگر در حال مطالعه این مقاله هستید تصمیم گرفته‌اید پا به دنیای برنامه‌نویسان حرفه‌ای بگذارید. به شما تبریک عرض می‌کنمحالا چرا دنیای برنامه‌نویسان حرفه‌ای؟چون معمولاً افراد آماتور از مفاهیمی چون دیزاین پترن‌ها استفاده نمی‌کنند و افراد حرفه‌ای هستند که به دنبال آموزش دیزاین پترن‌ها می‌باشندشاید برای برنامه‌نویسان تازه‌کار آشنایی با دیزاین پترن‌ها سخت و پیچیده باشد، اما واقعاً دیزاین پترن‌ها خیلی پیچیده نیستند و به‌راحتی می‌توانید با این مفهوم آشنا باشید و از انواع دیزاین پترن‌ها در پروژه‌های خود استفاده کنیددر ادامه این مقاله شما را کامل با مفهوم دیزاین پترن آشنا می‌کنیمبرای آشنایی کامل با دیزاین پترن ها آموزش دیزاین پترن ها در C# رو در سایت ببینیدبررسی یک چالش در پروژه‌های نرم‌افزاری چالش های پروژه در پروژه‌های نرم‌افزاری چالش‌ها و مشکلات متعددی وجود دارد و شما به‌عنوان  یک برنامه‌نویس و یا طراح سیستم باید راه‌حل‌هایی برای حل این مشکلات ارائه کنید.فرض کنید شما به‌عنوان یک مدیر فنی در یک شرکت طراحی نرم‌افزار مشغول به کار هستید و تیم شما در حال طراحی یک نرم‌افزار واژه‌پرداز مثل Office Word  می‌باشد.حالا نیاز کارفرما این است که در این نرم‌افزار واژه‌پرداز قابلیت‌های Undo/Redo  هم اضافه شود و شما به‌عنوان مدیر فنی باید بهترین راه‌حل، برای پیاده‌سازی این قابلیت‌ها رو ارائه کنید.فرض ما بر این است که شما و اعضای تیم تابه‌حال در هیچ نرم‌افزاری قابلیت‌های Undo/Redo را پیاده‌سازی نکرده‌اید و با نحوه پیاده‌سازی همچنین قابلیت‌هایی آشنایی ندارید.شما با یک چالش جدید روبه‌رو شده‌اید و مجبورید راه حلی برای غلبه بر این چالش ارائه کنید.شاید شما هم تجربه این را داشته باشید که بعد از مواجه شدن با یک چالش یا یک باگ در برنامه، روش‌هایی رو پیاده‌سازی کنید که مشکل برطرف شود و برنامه بتواند به‌درستی کار کند. ولی از طرفی مشکلاتی برای نگهداری و توسعه برنامه برای ما ایجاد کند. اما در تیم‌های بزرگ هدف فقط اجرای درست برنامه نیست!راه‌حل ارائه شده توسط شما باید بتواند به این سؤال‌ها پاسخ مثبت دهد:آیا در آینده توسعه برنامه را بدون مشکل می‌توانیم انجام دهیم؟این راه‌حل انعطاف‌پذیر هست؟آیابعد از پیاده‌سازی این راه‌حل سیستم ما Reusable هست؟استفاده مجدد از کدها بالاتر می‌رود؟با این راه‌حل طراحی برنامه بهتر می‌شود؟آیا کدنویسی تمیزی انجام شده؟این راه‌حل مورد پذیرش اعضای تیم هست؟ و همه اعضای تیم می‌توانند آن را به‌خوبی درک کنند؟می‌توانیم راه حلی که استفاده کرده‌ایم را ضمانت کنیم؟ آن‌قدر به راه‌حل اعتماد داریم که بتوانیم قاطع بگوییم این بهترین راه‌حل این مشکل است؟هر راه حلی که ارائه می‌کنید باید به این سؤالات پاسخ دهد و به این صورت می‌توانیم تشخیص دهید که راه‌حل مناسبی ارائه کرده‌ایم یا خیر؟حالا شما به‌عنوان مدیر فنی تیم توسعه می‌توانید در سریع‌ترین زمان ممکن یک راه‌حل مناسب برای قابلیت‌های Undo/Redo  به تیم ارائه بدهید؟ راه حلی که بتواند  به سؤالات بالا پاسخ مثبت بدهد؟اگر الان راه حلی به ذهن شما نمی‌رسد احساس ناامیدی نکنید. شاید ارائه همین راه حلی توسط یک نفر و در مدت‌زمان کوتاهی کار نشدنی باشد. یا لااقل به زمان زیادی برای تحقیق و توسعه نیاز داشته باشد.خب حالا که ما نمی‌توانیم خیلی سریع یک راه‌حل مناسب برای این مشکل ارائه کنیم باید چه کاری انجام دهیم؟مشکل شما با استفاده از دیزاین پترن‌ها برطرف می‌شود باید از یک دیزاین پترن که مخصوص این کار ارائه شده است استفاده کنید.دیزاین پترن چیست؟دیزاین پترن‌ها راه‌حل‌های اثبات شده‌ای برای حل مشکلات پروژه‌های نرم‌افزاری هستند و این یعنی این که شما مجبور نیستید برای چالش‌های که در پروژه‌ها دارید خودتان راه‌حل جدیدی ارائه کنید و می‌توانید از راه‌حل‌های موجود که به آن‌ها دیزاین پترن یا الگوهای طراحی گفته می شود استفاده نمایید.چرا از دیزاین پترن‌ها استفاده کنیم؟معمولاً یک الگوی طراحی توسط یک فرد خاصی ارائه نشده و معمولاً حاصل تلاش صدها برنامه‌نویس در تیم‌های مختلف که طی سالیان برای مقابله با یک مشکل خاص بارها و بارها استفاده شده و در نهایت توانسته با یک راه‌حل مناسب برای مقابله با آن مشکل تبدیل شود و الان به‌عنوان یک الگوی طراحی می‌توانیم از آن روش خاص استفاده کنیم.این دیزاین پترن‌ها حاصل تلاش و تجربه صدها برنامه‌نویس می‌باشند و در هزاران پروژه مختلف توسط تیم‌های زیاده استفاده شده است و به همین دلیل ما می‌توانیم به‌درستی این راه‌حل‌ها اعتماد کنیم.با استفاده ازالگوهای های طراحی موجود برای رفع مشکلات صرفه‌جویی قابل‌توجهی در زمان و هزینه می‌شود و میتوانیم طراحی مناسبی در پروژه‌های خود به دست بیاوریممعروف‌ترین دیزاین پترن‌ها کدام‌اند؟در همان سال‌های ابتدایی تیم‌های برنامه‌نویسی برای اجرای پروژه‌های مختلف در اقصی‌نقاط دنیا شروع به فعالیت کردند الگوهای طراحی زیادی توسط تیم‌ها و افراد مختلفی ارائه شدند. اما تعداد کمی از این دیزاین پترن‌ها محبوب شدند و توسط افراد زیاد مورداستفاده قرار گرفتند.در سال 1994 برای اولین‌بار چهار نفر تصمیم گرفتند از میان دیزاین پترن‌های ارائه شده تا آن زمان محبوب‌ترین و پرکاربردترین دیزاین پترن‌ها را در کتابی به نام   Design Patterns: Elements of Reusable Object- Oriented Software  جمع آوری کنند.آقایان اریک گاما، ریچارد هلم، رالف جانسون، جان ولیسیدس افرادی بودند که این کتاب را نوشتند که بعدها به چهار گانگستر یا gang of Four  معروف شدند و الگوهای طراحی  که در این کتاب جمع‌آوری‌شده نیز به دیزاین پترن‌های GOF  معروف شدند.چهار گانگستر در این کتاب 23 دیزاین پترن در سه دسته:دیزاین پترن‌های ساختاریدیزاین پترن‌های ایجادیدیزاین پترن‌های رفتاریارائه شدند. با این که از زمان ارائه این دیزاین پترن‌ها سال‌ها می‌گذرد اما همچنان این دیزاین پترن‌ها مورداستفاده قرار می‌گیرند و در همین وب‌سایت باگتو تا به امروز حداقل از 3 دیزاین پترن Gof استفاده شده است.البته بعد از سال 1994 دیزاین پترن‌های دیگری هم ارائه شدند که کاربردهای زیادی در برنامه‌نویسی دارند و امروزه هم از دیزاین پترن‌های Gof استفاده می‌شود و هم از دیزاین پترن‌های جدیدی که ارائه شده‌اند.چه کسانی باید کار با این دیزاین پترن‌ها را یاد بگیرند؟اگر برنامه‌نویسی شیءگرا انجام می‌دهید و قصد دارید وارد دنیای برنامه‌نویسان حرفه‌ای شوید و کدهای حرفه‌ای و تمیزتری بنویسید و یا اگر طراح نرم‌افزار یا مدیر فنی تیم‌های نرم‌افزاری هستید باید با دیزاین پترن‌ها آشنا باشید و بتوانید از آن‌ها در جای مناسب استفاده کنید.برای یادگیری سریع و اصولی 23 دیزاین پترنی که توسط چهار گانگستر معرفی شدند می‌توانید از دوره آموزش دیزاین پترن ها  در C# سایت باگتو شرکت نمایید. در این دوره تمامی 23 الگوی طراحی را به صورت کامل با مثال های عملی به شما آموزش می دهیم و بعد از شرکت در این دوره شما دانش کافی در مورد دیزاین پترن‌ها رو بدست می آورید و در هنگام مواجه شدن با مشکلات در پروژه‌های خود به‌راحتی نگاهی به لیست دیزاین پترن‌های که یاد گرفته‌اید می اندازید و مناسب ترین دیزاین پترن را برای رفع مشکل خود استفاده می کنید.برای قابلیت‌های undo/Redo  از چه دیزاین پترنی استفاده کنیم؟به چالش تیم توسعه خودمان برگردیم، حالا شما به‌عنوان مدیر فنی تیم توسعه نرم‌افزار متوجه شده‌اید که به‌جای پیداکردن یک روش جدید برای پیاده‌سازی قابلیت Undo/Redo  می‌توانید از دیزاین پترن‌های موجود استفاده کنیم.و حالا باید لیست دیزاین پترن‌های ارائه شده را در دست بگیرید و قابلیت‌های آنها را مطالعه کنید و از بین آن‌ها دیزاین پترنی که مناسب مشکل شما می‌باشد انتخاب کنید و از آن استفاده کنید که در این مورد خاص می‌توانید از دیزاین پترن Command استفاده کنید.نتیجه‌گیری:دیزاین پترن‌ها راه‌حل‌های اثبات شده‌ای هستند که برای رفع مشکلات ارائه شده‌اند. چون حاصل تلاش افراد و تیم‌های زیادی می‌باشد و در پروژه‌های مختلفی بارهاوبارها مورداستفاده قرار گرفته‌اند ما می‌توانیم به این روش‌ها اعتماد کنیم و از آنها استفاده کنیم.و از طرفی چون یک روش عمومی می‌باشند که احتمالاً همه اعضای تیم با آن آشنایی دارند همه افراد تیم به‌راحتی می‌توانند آن را درک کنند و آن را به‌درستی به کار ببرند.​</description>
                <category>باگتو</category>
                <author>باگتو</author>
                <pubDate>Sat, 04 Dec 2021 13:14:48 +0330</pubDate>
            </item>
            </channel>
</rss>