<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های محمد جواد ابراهیمی</title>
        <link>https://virgool.io/feed/@mjebrahimi</link>
        <description>مشاور و مدرس برنامه نویسی در حوزه دات نت - https://github.com/mjebrahimi</description>
        <language>fa</language>
        <pubDate>2026-04-15 10:05:07</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/27182/avatar/hxJ5Jf.jpg?height=120&amp;width=120</url>
            <title>محمد جواد ابراهیمی</title>
            <link>https://virgool.io/@mjebrahimi</link>
        </image>

                    <item>
                <title>اهمیت Side-effect Free و Idempotency در کدنویسی</title>
                <link>https://virgool.io/dotnetzoom/%D8%A7%D9%87%D9%85%DB%8C%D8%AA-side-effect-free-%D9%88-idemponency-%D8%AF%D8%B1-%DA%A9%D8%AF%D9%86%D9%88%DB%8C%D8%B3%DB%8C-gazelp35o4zw</link>
                <description>اهمیت Side-effect Free و Idemponency در کدنویسیبرنامه نویسی Functional Programming (به اختصار FP) در تعریف، یک Paradigm (پارادایم) برنامه نویسی هست که در اون برنامه ها به کمک ترکیب توابع ساخته میشن. (چه تعریف گنگ و غیر ملموسی!)از اونجایی که &quot;پارادایم&quot; کلمه غیر ملموسی هست و اگر اولین بارتون باشه که اون رو میشنوین احتمال زیاد مفهومش رو متوجه نمیشین اینطور تعریفش میکنم: پارادایم برنامه نویسی یعنی یک روش یا رویکرد برنامه نویسی.این رویکرد مفاهیم مختلفی رو داخل خودش داره که اینجا نمیخوام واردشون بشم. چیزی که اینجا میخوام روش تاکید کنیم 3 مفهوم زیر هست:1- Side-effect Free2- Idempotent3- Pure Functionsمفهوم Side-effect Freeاین مفهوم به این اشاره میکنه که یه تابع (متد) نباید &quot;تاثیر جانبی&quot; روی بقیه قسمت های برنامه داشته باشه. خب این یعنی چی؟ کی ما تاثیر جانبی رو بقیه میذاریم؟وقتی متد ما یک shared state تغییر رو بده. shared state به معنی متغیر/مقدار ایی هست که بین چندین تابع یا قسمت مختلف برنامه مشترک هست.پس در واقع وقتی یک تابع، متغیری یا مقداری را که بین چندین تابع یا قسمت های مختلف برنامه مشترک هست رو &quot;تغییر&quot; بده یعنی side-effect اتفاق افتادهدر کنار این مفهوم، مفهوم دیگری نیز وجود داره به نام Avoiding Shared State که تاکید میکنه از ایجاد و استفاده از shared state ها خودداری کنیم. وجود shared state خواسته یا ناخواسته باعث بروز side-effect میشه. پس خودداری از اون باعث میشه به side-effect نیز برنخوریم یا کمتر بر بخوریمچه مزایایی داره؟هرچه کد شما side-effect کمتری داشته باشه، احتمال وقوع باگ کمتر میشه. از طرفی چون تابع ما قرار نیست یک share-state رو تغییر بده، احتمال قوع مشکلات همزمانی هم کاهش پیدا میکنه و نیز با اطمینان بیشتری میتونین توابع تون رو به صورت parallel اجرا کنین.همچنین به ایزوله بودن متد های شما کمک میکنه که این موضوع مخصوصا توی تست نویسی بسیار حائز اهمیت هستنکته:هر برنامه &quot;باید&quot; side-effect داشته باشه. در نهایت شما میخواین دیتا رو داخل دیتابیس یا فایل یا... (که یک shared-state) محسوب میشه ذخیره کنین. پس نمیشه side-effect رو کاملا حذف کرد.ولی نکته اصلی اینجاست که باید side-effect ها رو شناسایی کنین، اونها رو محدود کنین و از پراکنده شدنشون توی کد ها جلوگیری کنین.مفهوم Idempotentاین مفهوم به این امر اشاره میکنه که زمانی توابع ما  Idempotent هستند که اگر اونها رو هرچند بار هم با مقادیر ورودی ثابت و مشابه فراخوانی کنیم همیشه نتیجه یا خروجی یکسان و ثابتی داشته باشهمثلا تابعی که یک مقدار Random رو برمیگردونه Idempotent نیست چرا که هربار نتیجه اش متفاوته؛ همینطور تابعی که DateTime.Now رو برمیگردونه.مثال کاربردیش توی دنیای واقعی، متدی میشه که وظیفه حذف یک رکورد رو داره. به این صورت که (مثلا از ORM EF استفاده میکنه و) ابتدا رکورد رو با id مورد نظر واکشی میکنه سپس اون رو به متد Remove میده و SaveChanges فراخوانی میشهخب بار اولی که این متد رو با id برابر با 100 فراخوانی کنیم اون سطح حذف میشه ولی بار دومی که اون رو &quot;با همین id&quot; فراخوانی میکنیم به exception بر میخوره چرا که دیگه اون رکورد وجود نداره که بخواد حذفش کنه (موقع find، مقدار اون رکورد null هست و متد Remove با ورودی null خطا میده)ولی همین متد رو اگر به این صورت پیاده سازی کنیم که قبل از حذف کردن، چک کنه که اگر این رکورد وجود نداره کاری انجام نده، متد ما Idempotent میشه چرا که هر چندبار فراخوانی اون، یک نتیجه رو داره و اون هم اطمینان از حذف اون رکورد هستنکته:مفهوم Idempotent بودن توی معماری Event-Driven و الگوی Pub/Sub هم اهمیت بسیار بالایی داره. از اونجایی که یک Event یا Message ممکنه به هر دلیلی &quot;بیش از یکبار&quot; توسط Subscriber ها پردازش بشه. باید اطمینان داشته باشیم که نتیجه یکسانی داره و عملکرد سیستم رو تحت تاثیر نمیگذاره (مثلا فرض کنید برای یک سفارش، دو تا فاکتور برای مشتری ثبت بشه!)نمیخوام خیلی وارد روش های Idempotency بشم فقط اینکه معمولا 2 روش وجود داره:1- طوری پیاده سازی کنیم که چند دفعه اجرا شدنش توی عملکردش تاثیری نداشته باشه2- یک flag ایی رو به ازای هر Message داشته باشیم که وقتی اون Message پردازش میشه اون رو true کنیم و دفعات بعدی با چک کردن این flag و متوجه شدن از اینکه قبلا پردازش شده، دیگه پردازشش نکنیم (در این حالت ممکنه استفاده از تکنیک های synchronization مانند locking لازم باشه)چه مزایایی داره؟باعث Reliability (قابل اعتماد) تر شدن توابع مون میشه چون چندین بار اجرا، نتایج یکسانی میدهتست نویسی رو راحت تر میکنه چون با پارامتر های یکسان، هر بار خروجی متفاوتی نمیدهمفهوم Pure Functionsاین مفهوم تعریف خیلی ساده ای داره، تابعی Pure Function (خالص) هست که هم Side-effect Free باشه هم Idempotent. در غیر این صورت میشه Impure Function (تابع ناخالص)مزیت هاشم که واضحه، مشخصا مزایای جفتشون رو داره.جمع بندیمفاهیم Functional Programming الزاما نیاز به استفاده از زبان های FP (مثل FSharp یا Scala یا Haskell) ندارن. خیلی از اون مفاهیم به راحتی داخل زبان های دیگه و رویکرد Object Oriented Programming نیز قابل استفاده و بسیار مفید هستند و باعث Maintainability و Reliability میشن (نگهداری بهتر کد ها و قابل اعتماد تر بودنشون)توصیه میکنم که اون مفاهیم رو یاد بگیرید و بسته به نیازتون توی کدنویسی های OOP تون هم ازش استفاده کنیدمقاله زیر که این مفاهیم رو به خوبی بررسی کرده و مطالعه اون خالی از لطف نیست https://the-dr-lazy.github.io/understanding-side-effect-the-right-way مقالات بیشتر کانال تلگرام دات نت زومhttps://t.me/DotNetZoom</description>
                <category>محمد جواد ابراهیمی</category>
                <author>محمد جواد ابراهیمی</author>
                <pubDate>Sun, 14 Mar 2021 13:18:48 +0330</pubDate>
            </item>
                    <item>
                <title>وب اسمبلی (WebAssembly) چیه؟ و چرا آینده Web هست؟!</title>
                <link>https://virgool.io/dotnetzoom/%D9%88%D8%A8-%D8%A7%D8%B3%D9%85%D8%A8%D9%84%DB%8C-%28WebAssembly%29-%DA%86%DB%8C%D9%87%D8%9F-%D9%88-%DA%86%D8%B1%D8%A7-%D8%A2%DB%8C%D9%86%D8%AF%D9%87-Web-%D9%87%D8%B3%D8%AA%D8%9F!-eqkp2q9igdvd</link>
                <description>وب اسمبلی (WebAssembly) چیه؟ و چرا آینده Web هست؟!وب اسمبلی (یا WASM مخفف WebAssembly) یک زبان low-level (سطح پایین) با فرمت Binary (دو-دویی) هست که توسط مرورگر اجرا میشه در اینجا چندتا نکته مهم وجود داره:1️⃣ اول اینکه یه زبان سطح-پایین هست و با پرفرمنسی نزدیک به Native اجرا میشه (اصلا یکی از اهداف اصلی ایجاد WASM اجرا سریع تر کدها توی مروگر بود)2️⃣ برخلاف js به جای اینکه فرمت متنی داشته باشه، فرمت باینری (دو-دویی) داره که باعث میشه کد حجم کمتری داشته باشه در نتیجه این به معنی بارگزاری سریع تر نیز هستدر واقع وقتی کدی قراره human-readable باشه حجم بیشتری میگیره تا اینکه باینری باشه. مشابه این اتفاق برای سریالایز کردن به json در مقایسه با binary formatter هایی مانند protobuf و message-pack هم اتفاق میافته. ضمن اینکه کدی که به صورت باینری باشه امکان فشرده سازی بیشتر و بهینه تری داره3️⃣ علاوه بر حالت باینری، یه حالت متنی (به صورت S-expression) هم داره  که human-readable هست و قابلیت دیباگ و خوانایی خوبی دارهاین فرمت در قالب فایل های با پسوند wat. یا wast. ذخیره میشه که میتونین نمونه کدش رو اینجا ببینین (البته در گذشته این دو معادل هم بودند ولی جدیدا بیشتر wat. برای اینکار استفاده میشه)4️⃣ گرچه در ابتدا WASM برای اجرا توی مروگر طراحی شده بود ولی بعد ها توی پلتفرم های دیگه هم مورد استقبال قرار گرفت و یه سری Runtime هایی (مانند wasmer و wasmtime) براش نوشته شد که این امکان رو میده که برنامه های WASM رو توی Desktop و IoT و Server و... اجرا بشن5️⃣ این زبان در کنار خودش یه سری کامپایلر (از جمله emscripten و binaryen) ارائه داده تا زبان های low-level ایی همچون C و ++C و Rust بتونن کدشون رو به WASM کامپایل کننزبان های دیگه هم از جمله #C و Java و Python و Go به این سمت حرکت کردن و امکان اجرای کد هاشون رو توی مرورگر فراهم کردند. به عنوان مثال Blazor امکان اجرا کد های #C رو در مرورگر فراهم میکنهمزیت این روش اینه که شما به زبون های دلخواه خودتون میتونین کدی بنویسین که توی مرورگر اجرا بشه. یعنی اصلا نیاز نیس زبان WASM رو بلد باشین.حالا سوال مهم اینه که این زبان جای JavaScript رو میگیره؟جواب: نه، اصلا نمیتونه. WASM اومده که مکمل JS باشه و ضعف های اون رو برطرف کنهزبان JS تو پلتفرم های زیادی استفاده میشه و جامعه بسیار بزرگی داره پس نه WASM نه هیچ زبان دیگه ای نمی تونه اون رو کنار بزنه (حداقل به این زودی ها نه)در واقع تنها مزیت منحصر به فرد JS سمت Front بود که تنها پادشاه سمت مرورگر بود. ولی الان که امکان اجرای زبان های دیگه سمت مرورگر فراهم شده عملا راه برای ظهور پادشاه های دیگری هم فراهم شدهیکی از کارهای دیگری که در این زمینه انجام شده AssemblyScript هست که در واقع یک کامپایلر TypeScript به WASM هست که سینتکس کدش کاملا TS نیست ولی شبیه اونه و نهایتا کد های شما رو به WASM کامپایل میکنهدر آخر نکته مهم اینه که که بدونین این تکنولوژی محکوم به اینه که آینده وب باشه!یعنی حتی اگه این زبان از خودش هیچ آورده ای هم نداشته باشه بازم مسیر توسعه وب در آینده به سمت اون هدایت میشه (توسط دست های پشت پرده :دی) . چرا؟ چون توسط بنیاد W3C (کنسرسیوم جهانی وب) به عنوان یه استاندارد شناخته شده و نیز شرکتای غولی همچون Google و Microsoft و Mozilla و Apple و Intel و Red Hat و... روش سرمایه گذاری شدهمیگن اگه میخوای پیش گوی خوبی باشی، آینده رو پیش بینی نکن، اون رو بساز. و این ها در واقع کسانی هستند که مسیر توسعه وب رو پیش بینی نمیکنند بلکه اون رو خودشون میسازنداگه میخواین بیشتر در مورد WebAssembly بدونین این مقاله خوبیه https://vrgl.ir/cRTeL ✅مقالات بیشتر در دات نت زومhttps://t.me/DotNetZoom</description>
                <category>محمد جواد ابراهیمی</category>
                <author>محمد جواد ابراهیمی</author>
                <pubDate>Sun, 03 Jan 2021 22:25:12 +0330</pubDate>
            </item>
                    <item>
                <title>کتابخانه ای جهت پیاده سازی Unobtrusive Ajax در ASP.NET Core</title>
                <link>https://virgool.io/dotnetzoom/aspnet-core-unobtrusive-ajax-rd8u9lna8imc</link>
                <description>کتابخانه ای جهت پیاده سازی Unobtrusive Ajax در ASP.NET Coreقبلا توی MVC5 میتونستیم توسط Ajax.BeginForm و Ajax.ActionLink براحتی فرم ها و لینک های Ajax ایی درست کنیم که بهش Unobtrusive Ajax هم میگفتند.متاسفانه این امکان (Ajax Helper ها) توی ASP.NET Core حذف شدند و قرار هم نیست اضافه بشند. البته همچنان میشه از Unobtrusive Ajax استفاده کرد ولی باید دستی بنویسیم و attribute هاش رو به تگ form اضافه کنیم.مقاله زیر آموزش کاملش رو به همراه نکات خوبی ارائه داده. https://www.dotnettips.info/post/2518 اخیرا اما برای مهاجرت پروژه ای که با MVC5 نوشته شده بود و زیاد از Ajax.BeignForm استفاده کرده بود به ASP.NET Core، خیلی به این امکان نیاز داشتم و دیدم که کسی تا حالا کتابخونه ای برای این کار نزده.پس دست به کار شدم و نتیجه اش شد یه کتابخونه خیلی کامل و با امکاناتی بیش از پیش از جمله:اگر از قابلیت Ajax Helper ها استفاده کنین به صورت خودکار فایل جاوااسکریپت Unobtrusive Ajax رو توی Layout شما تزریق میکنه و در صورت عدم استفاده اون رو تزریق نمیکنه. پس هم فایل js اضافی تو صفحه لود نمیشه و هم نگرانی بابت فراموش کردنش نخواهید نداشتبه صورت پیشفرض از یک جاوااسکریپ Embed شده استفاده میکنه ولی میتونین تنظیم کنین که از CDN (وبسایت cdnjs) استفاده کنهبا Upload فایل ها سازگارهبه صورت خودکار ForgeryToken رو ارسال میکنه و با [AntiForgeryTokenValidation] سازگارهدارای اتریبیوت [AjaxOnly] برای محدودیت گذاری روی اکشن ها هستدارای اکسنشن متد httpRequest.IsAjaxRequest() هست تا بتونین براساس اون تصمیم بگیرین PartialView برگردونین یا Jsonدارای چندین متد overload اضافی هست برای راحتی بیشترتفاوت این کتابخونه با jQuery Ajax اینه که در عمل خود این کتابخونه هم از jQuery Ajax استفاده میکنه ولی برای جا هایی که سفارشی سازی خاصی لازم ندارید استفاده از ajax رو خیلی ساده تر میکنه. توی صفحه اصلی ریپازیتوریش طریقه استفادش رو کامل توضیح دادم اما اگه خواستین میتونین پروژه رو دانلود/clone کنین و پروژه demo رو اجرا کنین تا چندتا از sample هاش رو ببینین https://github.com/mjebrahimi/AspNetCore.Unobtrusive.Ajax ✅مقالات بیشتر در دات نت زومhttps://t.me/DotNetZoom</description>
                <category>محمد جواد ابراهیمی</category>
                <author>محمد جواد ابراهیمی</author>
                <pubDate>Tue, 03 Nov 2020 18:49:09 +0330</pubDate>
            </item>
                    <item>
                <title>لب هم به رومون بسته شد + راهکار ها</title>
                <link>https://virgool.io/dotnetzoom/gitlab-%D8%AA%D8%AD%D8%B1%DB%8C%D9%85-%D9%88-%D9%85%D8%B3%D8%AF%D9%88%D8%AF-%D8%B4%D8%AF%D9%86-%D8%A7%DA%A9%D8%A7%D9%86%D8%AA-%D9%87%D8%A7-yl7vvtxqfqms</link>
                <description>بلاک شدن اکانت ها توسط GitLab مشابه اتفاقی که قبلا واسه GitHub افتاده بود الان متاسفانه واسه GitLab داره میافتهچند روز پیش گیتلب IP های ایران رو تحریم کرد و از دیروز داره اکانت های ایرانی ها رو مسدود میکنه و در این صورت دیگه دسترسی به کد هاتون نخواهید داشتو اما حالا باید چیکار کنیم؟اگه هنوز اکانتتون مسدود نشده عجله کنید و حتما هرچه سریعتر از Repository هاتون Backup بگیرید. دقت داشته باشین که به هیچ عنوان با IP ایران به گیتلب ریکوئست نزنید (هرچند بزنید هم جواب نمیده ولی احتمال مسدود شدن اکانتتون احتمالا بیشتر میشه) راهکار های جایگزین1- مهاجرت به Azure DevOps :اگه به دنبال یه سرور گیت با امکانات خوب واسه پروژه های private تون هستید  Azure DevOps یکی از بهترین گزینه هاست (هرچند احتمال تحریم در آینده برای این هم وجود داره ولی فعلا ازاده و مشکلی نداره) تنها محدودیت 5 یوزر به ازای هر پروژه داره. BitBuket هم که کمافی‌سابق جز گزینه ها هست.2- گیت سرور شخصی:اگه به دنبال راه اندازی self-host  روی سرور خودتون هستید هم Azure DevOps (تحت عنوان Azure DevOps Server و اینجا) نسخه قابل نصب داره. همچنین GitLab هم نسخه رایگان Community Edition (یا Gitlab CE) داره و این امکان رو به شما میده که سایت گیت لب رو (با یه سری امکانات محدود) روی سرور خودتون نصب کنین.3- گزینه های دیگر:برنامه های دیگری هم وجود داره که امکان راه اندازی git service به صورت self-hosted رو میدن و بهترینشون  Gitea و Gogs هستند.✅ کانال تلگرام دات نت زومhttps://t.me/DotNetZoom</description>
                <category>محمد جواد ابراهیمی</category>
                <author>محمد جواد ابراهیمی</author>
                <pubDate>Fri, 09 Oct 2020 10:58:20 +0330</pubDate>
            </item>
                    <item>
                <title>مجموعه آموزش های  Microservices در NET Core.</title>
                <link>https://virgool.io/dotnetzoom/awesome-microservices-netcore-waakxophfdt0</link>
                <description>مجموعه آموزش های  Microservices در NET Core. اگر در اینترنت به دنبال آموزش های Microservices گشته باشین متوجه میشین که اکثر مقالات یا به صورت کلی و عمومی هستند (نه مختص دات نت) و یا برای زبان های دیگه اند و در نهایت اونایی هم مختص دات نت باشن به صورت پراکنده در فضای اینترنت پخش شده اندعلاوه بر این، مبحث Microservices دارای موضوعات متعدد و بزرگی هست و نمیشه اون رو با یک یا چند مقاله جسته و گریخته یاد گرفت واسه همین به یک سری آموزش نیاز دارید.همچنین بعد از یادگیری مفاهیم پایه این مبحث، بهترین چیزی که میتونه شما رو بر روی این موضوع مسلط کنه، بررسی سورس نمونه پروژه های واقعی که بر پایه Microservices و NET Core. نوشته شده اند هستریپازیتوری زیر سعی کرده بهترین آموزش های Microservices که مختص NET Core. هستند رو گردآوری کنه و در پایان لیستی از پروژه های سورس باز گیتهاب که با این معماری نوشته شده اند رو جمع آوری کنه.اگر علاقمند به یادگیری Microservices در NET Core. هستید این بهترین منبعی رایگانی هست که میتونه به شما کمک کنه. https://github.com/mjebrahimi/Awesome-Microservices-NetCore ✅ کانال تلگرام دات نت زومhttps://t.me/DotNetZoom</description>
                <category>محمد جواد ابراهیمی</category>
                <author>محمد جواد ابراهیمی</author>
                <pubDate>Tue, 08 Sep 2020 21:34:43 +0430</pubDate>
            </item>
                    <item>
                <title>برترین Shortcut های Visual Studio 2019</title>
                <link>https://virgool.io/dotnetzoom/%D8%A8%D8%B1%D8%AA%D8%B1%DB%8C%D9%86-shortcut-%D9%87%D8%A7%DB%8C-visual-studio-2019-fnkkewoucixj</link>
                <description>برترین Shortcut های Visual Studio 2019اگه میخواین از ویژوال استادیو به صورت حرفه ای استفاده کنین و البته بازدهی تون رو خیلی بیشتر کنین، باید میانبر های ویژوال استادیو رو بلد باشین. اینطوری کد نویسی خیلی شیرین تر میشه. در اینجا سعی کردم بهترین و کاربردی ترین  میانبر ها رو لیست کنم:Code Formatting : Ctrl+K+Dکد شما رو تر و تمیز یا به به قولی صاف و صوف میکنهSuggested Code Refactoring : Ctrl+. or Alt+Enterپیشنهاد هایی برای ریفکتور کردن کدی که cursor موس روش هست بهتون میده (در واقع  light bulb ویژوال استادیو رو باز میکنه)Go to Definition : F12شما رو به جایی که کلاس/اینترفیس/متد مربوطه تعریف شده ارجاع میدهGo to Implementations : Shift+F12 شما رو به جایی که کلاس/اینترفیس/متد پیاده سازی شده ارجاع میده (روی اینترفیس تست اش کنین) + نمایش لیست رفرنس ها Go to Line : Ctrl+Gشماره خط کد رو از شما میگیره و شما رو به کد مربوطه ارجاع میدهFind : Ctrl+Fپنجره جستجو رو براتون باز میکنهFind in files (Advance) : Ctrl+Shift+Fپنجره جستجوی پیشرفته رو براتون باز میکنهGo to All search : Ctrl+T or Ctrl+,بنجره جستجو در همه جا (کد ها، نام فایل ها، و...) رو براتون باز میکنه. Quick Search : Ctrl+Alt+Q یه چیزی مشابه قبلی با این تفاوت که توی ابزار و امکانات ویژوال استادیو هم سرچ میکنه (میشه انتخاب کرد فقط تو کد ها و فایل ها سرچ کنه)Show Current File in Solution Explorer : Ctrl+[+Sفایل جاری رو توی Solution Explorer به صورت انتخاب شده نشونش میدهGo to Matching Brace : Ctrl+]شما رو به براکت شروع و پایان کد مربوطه (متد/شرط/حله و...) ارجاع میدهComment Selected Code : Ctrl+K+Cکد انتخاب شده یا خطی که cursor موس روش هست رو کامنت میکنهUncomment Selected Code : Ctrl+K+Uکد انتخاب شده یا خطی که cursor موس روش هست رو از کامنت خارج میکنهShow Autocomlete : Ctrl+Spaceبسته به اینکه cursor موس تون روی چه کدی هست منوی Autocomplete مربوطه رو باز میکنهShow Overloads : Ctrl+Shift+Spaceوقتی cursor موس روی یک متد هست، لیست overload های دیگه شو نشون میدهCollaps methods : Ctrl+M+Oمتد های فایل جاری رو collapse میکنه (میبنده) مناسب واسه وقتی که کلاس شلوغی دارینExpand methods : Ctrl+M+Pمتد های فایل جاری رو از collapse در بر میگردونه به حالت عادی (باز میکنه)Ctrl+Enter یک خط جدید (new line) بالای جایی که cursor موس قرار داره ایجاد میکنهCtrl+Shift+Enterیک خط جدید (new line) پایین جایی که cursor موس قرار داره ایجاد میکنهRename Property : Ctrl+R+Rنام یک پروپرتی، متد، کلاس و... رو در همه جای پروژه تغییر میدهView Clipboard history : Ctrl+Shift+Vلیست تاریخچه کلیپ بورد شما رو نشون میده و میتونین ازش انتخاب کنین✅ کانال تلگرام دات نت زومhttps://t.me/DotNetZoom</description>
                <category>محمد جواد ابراهیمی</category>
                <author>محمد جواد ابراهیمی</author>
                <pubDate>Sun, 23 Aug 2020 20:09:17 +0430</pubDate>
            </item>
                    <item>
                <title>نکاتی در مورد تست نویسی روی EF6/EFCore توسط دیتابیس InMemory</title>
                <link>https://virgool.io/dotnetzoom/%D9%86%DA%A9%D8%A7%D8%AA%DB%8C-%D8%AF%D8%B1-%D9%85%D9%88%D8%B1%D8%AF-%D8%AA%D8%B3%D8%AA-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%B1%D9%88%DB%8C-ef6efcore-%D8%AA%D9%88%D8%B3%D8%B7-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-inmemory-vuqvotbiphxt</link>
                <description>نکاتی در مورد تست نویسی روی EF6/EFCore توسط دیتابیس InMemoryیکی از مزیت های الگوی Repository، قابلیت تست پذیری لایه دیتا به واسطه ساختن ریپازیتوری‌های Fake هست. در واقع ریپازیتوری‌هایی می‌سازیم که از (مثلا IRepository) ارث‌بری میکنه ولی به جای ذخیره سازی در بانک اطلاعاتی، دیتاها رو به صورت InMemory ذخیره و واکشی میکنه.همچنین روش های دیگری برای اینکار وجود داره مثل Mock کردن DbContext یا DbSet که هر کدوم دردسرها و محدودیت‌های خودشون رو داره تا جایی که حتی بخشیدن عطاش به لقاش منطقی تره.اینجا لیستی از بهترین منابعش رو گلچین کردم 1 و 2 و 3 و 4 و 5 و 6 و 7 و 8 و 9 تا واسه خودم هم آرشیو بمونه.توی EFCore به دلیل وجود پروایدر InMemory نیازی به این کار نیست و عمل تست نویسی رو برامون خیلی راحت کرده ولی توی EF6 چون پروایدر InMemory نداریم مجبوریم تن به یکی از اینها بدیم.پروژه سورس باز و رایگان Effort یک پروایدر InMemory مخصوص Entity Framework هست (که از نسخه های 5 و 6 EF پشتیبانی میکنه) و امکان UnitTest نویسی برای EF رو براحتی براتون فراهم میکنه و سعی کرده است.این کتابخونه از برای دیتابیس خودش از NMemory استفاده میکنه که یک Engine دیتابیس رابطه ای InMemory هست و سعی کرده تا حد زیادی رفتارهای یک دیتابیس واقعی رو شبیه سازی کنه و از مواردی از جمله Indexes و Foreign Key Relations و Transaction Handling and Isolation و Stored Procedures و ... پشتیبانی میکنه پس به نسبت بقیه روش ها (مثل یه List استاتیک!) در مورد شبیه سازی دیتابیس، رفتار بسیار بسیار قابل اعتمادتری ارائه میده.کار باهاش هم خیلی راحته و از لینک و دردسرها و محدودیت‌های پیاده‌سازی روش‌های قبلی رو نداره:Entity Framework Effort Overviewواسه مطالعه بیشتر هم لینک های زیر خوبن:Save time mocking – use your real Entity Framework DbContext in unit testsTwo strategies for testing Entity Framework - Effort and SQL CE Using Effort - Entity Framework Unit Testing Toolنکته: تمام روش های بالا و اساسا تمام دیتابیس‌های InMemory (حتی پروایدر InMemory خود EFCore)  یه مشکل اساسی دارن و اون هم اینه که هیچ کدوم نمیتونن 100 درصد رفتار یک دیتابیس واقعی رو شبیه سازی کنن. بدیهی هم هست چون که هیچ کدوم نمیتونن تمام قابلیت های دیتابیس واقعی پروژه شما (مثلا SqlServer) رو داشته باشن.این کمبودها که تعدادشون هم کم نیست بعضی مواقع باعث مشکل میشن. مثلا در مورد دیتابیس InMemory خود EFCore :شما نمیتونین SP های خودتون رو روش اجرا کنینشما نمیتونین از Transaction های دیتابیسی استفاده کنینشما نمیتونین از Function های دیتابیسی و یا کلا هر قابلیت منحصر به دیتابیس تون استفاده کنینقیودی که فقط توی دیتابیس واقعی اعمال میشن و ...حتی یک کوئری یکسان روی InMemory و دیتابیس واقعی میتونه نتایج متفاوتی داشته باشه (بدلیل تفسیر متفاوتی ازش توسط پروایدر مربوطه انجام میشه)در واقع تست درون حافظه‌ی LINQ to Objects با تست واقعی LINQ to Entities که روی یک بانک اطلاعاتی واقعی اجرا می‌شود، الزاما نتایج یکسانی نخواهد داشتحتی اگه یه متدی که معادل SQL ایی نداره توی کوئری هاتون استفاده کنین، هنگام استفاده از InMemory خطا نمیده ولی موقع دیتابیس واقعی خطای عدم امکان تفسیر به معادل Sql میده در نتیجه همه اینها پاس شدن یک تست با دیتابیس InMemory الزاما دلیل بر صحت عملکرد پروژه و به معنای درست کار کردن برنامه در دنیای واقعی نیست و ممکنه همون تست با دیتابیس واقعی به خطا بخوره.در نهایت هرچند که دیتابیس InMemory رفتار قابل اطمینانی از یه دیتابیس رو نمیتونه شبیه سازی کنه ولی در مورادی که به این تناقض ها بخورد نمیکنیم (معمولا در حد CRUD و یه Storage) میتونه خیلی مفید و کاربردی باشه. فقط نکته اش اینه که حواسمون به این کمبود ها باشه و توصیه میشه که حتما در این گونه موارد که از Integration Test به همراه یک دیتابیس واقعی استفاده کنیم.نظر شما در این باره چیه؟ توی پست‌های بعدی توضیحات بیشتری خواهم داد.✅ کانال تلگرام دات نت زوم</description>
                <category>محمد جواد ابراهیمی</category>
                <author>محمد جواد ابراهیمی</author>
                <pubDate>Fri, 03 Jul 2020 01:00:02 +0430</pubDate>
            </item>
                    <item>
                <title>معرفی 22 کتاب برتر برای برنامه نویسان NET.</title>
                <link>https://virgool.io/dotnetzoom/%D9%85%D8%B9%D8%B1%D9%81%DB%8C-20-%DA%A9%D8%AA%D8%A7%D8%A8-%D8%A8%D8%B1%D8%AA%D8%B1-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%D8%A7%D9%86-net-s9jsxpczqnwt</link>
                <description>معرفی 20 کتاب برتر برای برنامه نویسان NET.اگه اهل کتابخوندن هستین لیست زیر 20 تا از بهترین و محبوبترین کتابهای برنامه نویسی مناسب برای برنامه نویسان دات نت هست که گلچین شده.Pro ASP.NET Core 31. کتاب Pro ASP.NET Core 3چارچوب ASP.NET Core 3، آخرین تحول پلتفرم وب ASP.NET مایکروسافت است که یک چارچوب &quot;host-agnostic&quot; و مدل برنامه نویسی با بهره وری بالا را فراهم می‌کند که باعث ترویج معماری کد تمیز تر، توسعه آزمون محور و توسعه پذیری قدرتمندی می‌شود.ویرایش هشتم کتاب Pro ASP.NET Core 3، که برای ASP.NET Core 3 به روز شده است، شامل توضیحات مفصلی درباره پلتفرم ASP.NET Core و چارچوب‌های برنامه هایی که پشتیبانی می‌کند، می‌شود. این کتاب ASP.NET Core 3 را مورد بررسی قرار می‌دهد و ابزار‌ها و تکنیک‌های لازم برای ساختن برنامه‌های وب مدرن و توسعه پذیر را یاد می‌دهد. همچنین در این کتاب قابلیت‌ها و توانمندی‌ها جدیدی همچون MVC 3، Razor Pages، Blazor Server و Blazor WebAssembly، همراه با چگونگی استفاده از آن‌ها مورد بررسی قرار گرفته اند.دانلود رایگان کتابدانلود رایگان کتاب (نسخه 2) دانلود از سایت مرجعASP.NET Core in Action2. کتاب ASP.NET Core in Actionاین کتاب درباره‌ی فریمورک ASP.NET Core است، این که چگونه می‌توان با استفاده از آن برنامه‌های تحت وب ساخت. این کتاب به شما در ایجاد اولین برنامه‌های شما کمک می‌کند.دانلود رایگان کتاب دانلود از سایت مرجعProgramming ASP.NET Core3. کتاب Programming ASP.NET Coreاین کتاب بر روی قابلیت‌های کراس پلتفرم ASP.NET Core و یا فقط چیزهایی که از نسخه‌های قبلی تغییر کرده اند تمرکز می‌کنند، این کتاب یک مسیر کامل آموزشی برای هر توسعه‌دهنده‌ای که می‌خواهد ASP.NET Core را برای ساخت برنامه‌های واقعی یاد بگیرد ارائه می‌دهد.دانلود رایگان کتابدانلود از سایت مرجعC# 8.0 and .NET Core 3.0 – Modern Cross-Platform Development4. کتاب C# 8.0 and .NET Core 3.0 – Modern Cross-Platform Developmentتاب‌های هزاران صفحه ای درمورد سی شارپ وجود دارند که هدفشان تبدیل شدن به مرجعی جامع برای زبان برنامه نویسی#C و دات نت فریمورک است. اما این کتاب متفاوت است. این کتاب، مختصر است و هدفش این است که سریع و سرگرم کننده باشد و مثال‌های عملی زیادی نیز برای هر مبحث ارائه کرده است.دانلود رایگان کتابدانلود از سایت مرجعEntity Framework Core in Action5. کتاب Entity Framework Core in Actionکتاب Entity Framework in Action درباره‌ی چگونگی نوشتن کد‌های EF Core به صورتی سریع، صحیح و در نهایت با کارایی بالا است. برای رسیدن به این هدف مثال‌ها، نکات و تکنیک‌های زیادی را در این کتاب گنجانده شده است. در طول این کتاب مقداری هم از این که EF Core در درون چگونه کار می‌کند نیز گفته شده است تا در مواقعی که چیز‌ها آن گونه که باید پیش بروند نرفتند به کمک شما بیاید.دانلود رایگان کتابدانلود از سایت مرجعC# in Depth 6. کتاب C# in Depthویرایش چهارم کتاب C# in Depth، درباره‌ی زبان برنامه نویسی سی شارپ است. در اغلب موارد نیز وارد جزئیات runtime که وظیفه‌ی اجرای کد‌های شما را بر عهده دارد و همچنین کتابخانه هایی که از برنامه‌ی شما پشتیبانی می‌کنند خواهیم شد، اما تمرکز اصلی این کتاب بر روی خود این زبان است. هدف اصلی این کتاب این است که باعث شود که شما تا آن جایی که امکان دارد با زبان سی شارپ راحت باشید تا این که بخواهید با آن سر جنگ بردارید.دانلود رایگان کتابدانلود از سایت آمازونC# 7.0 in a Nutshell7. کتاب C# 7.0 in a Nutshellسی‌شارپ 7.0 ششمین به روز رسانی بزرگ زبان برنامه نویسی پرچم‌دار مایکروسافت است که سی‌شارپ را در عنوان زبانی با وسعت و انعطاف‌پذیری خارق العاده ای قرار داده است. از یک طرف انتزاعیات سطح بالایی مثل query expressionها و asynchronous continuations را ارائه می‌دهد، در صورتی که از طرفی دیگر این اجازه را می‌دهد تا با ساختن چیزهایی مثل value typeها سفارشی و اشاره‌گرهای اختیاری، بهره‌وری بیشتری سطح پایین داشته باشید.دانلود رایگان کتابدانلود از سایت آمازونCLR via C# 8. کتاب CLR via C# اکتبر سال 2012 هست؛ من در حال نگارش این کتاب هستم و سیزده امین سالی می‌شود که من با NET. Framework و #C کار می‌کنم. در طول این 13 سال، من همه نوع برنامه‌ای نوشتم و به عنوان مشاور در مایکروسافت، کمی هم در خود NET Framework. کمک کرده‌ام. به عنوان شریک هم در شرکت خودم، با مشتری‌های زیادی سر و کار داشتم و به آن‌ها در طراحی نرم افزار، اشکال زدایی آن، افزایش کارایی و بازده برنامه و مشکلاتی که NET Framework. داشتند، کمک کردم. همه‌ی این تجربیات واقعا به من کمک کردند تا نقاطی که بیشتر افراد در هنگام کار با NET Framework.، با مشکل مواجه می‌شوند را شناسایی کنم. من کوشش کردم تا چکیده ای از این تجربیات را در متون این کتاب قرار دهم.دانلود رایگان کتابدانلود از سایت آمازونThe Art of Unit Testing9. کتاب The Art of Unit Testingدر این کتاب شما گام به گام  از نوشتن اولین آزمون واحد ساده تا نوشتن مجموعه‌ی کاملی از تست‌ها که قابل نگه‌داری، خوانا و قابل اعتماد باشند، راهنمایی می‌شوید. سپس به سرعت با موضوعاتی چون mocks وstubs آشنا می‌شوید و این در حالی هست که در حال یادگیری فریمورک‌های ایزوله‌سازی به مانند Moq، FakeItEasy وTypemock isolator هستید. همچنین در ادامه با الگوهای تست و سازمان‌دهی، ریفکتور کردن کدهای برنامه و یادگیری تست کردن کدهای ناپایدار را خواهید آموخت. همچنین در مورد integration testing و تکنیک‌های تست کردن با پایگاه داده را نیز می‌آموزید.دانلود رایگان کتابدانلود از سایت آمازونUnit Testing Principles, Practices, and Patterns 10. کتاب Unit Testing Principles, Practices, and Patternsکتاب اصول‌ها، الگو‌ها و روش‌های آزمون واحد (Unit Testing Principles, Patterns and Practices)، به شما می‌آموزد که تست هایی را طراحی کنید که مدل دامنه و سایر نواحی اصلی کد شما را هدف قرار دهند. در این راهنما که به شکلی واضح نوشته شده است، شما یاد می‌گیرید که تست‌های حرفه ای با کیفیت بسازید، با خیال راحت فرآیند تست کردن خود را خودکار کنید و تست کردن را در داخل چرخه عمر برنامه یکپارچه کنید. وقتی ذهنیت تست کردن را قبول کنید، از اینکه چگونه تست‌های بهتر باعث می‌شوند که کد بهتری بنویسید شگفت زده خواهید شد.دانلود رایگان کتابدانلود از سایت آمازونMicrosoft .NET - Architecting Applications for the Enterprise 11. کتاب Microsoft .NET Architecting Applications for the Enterprise طراحی الگوهای کارآمد بهترین استراتژی جهت کاستن از پیچیدگی پروژه‌های مختلف و دریافت نتایج بهتر می‌باشد در طی سالیان اخیر شیفت تکنولوژی به سمت کلود، موبایل و ... باعث به وجود آمدن زمینه‌ها و موقعیت‌های جدیدی شده است که در این کتاب سعی شده تا با این دید الگوها و best practice‌ها را با استفاده از مثال‌های واقعی پیاده سازی کنید و شاهد به دست آوردن نتایج رضایت مند در پروژه‌ی خود باشیم.دانلود رایگان کتابدانلود از سایت آمازونHands-On Software Architecture with C# 8 and .NET Core 312. کتاب Hands-On Software Architecture with C# 8 and .NET Core 3در کتاب Hands-On Software Architecture with C# 8، یاد می‌گیرید که چگونه برنامه‌های سازمانی با کارایی بالا و مقیاس پذیری زیاد را با استفاده از آخرین قابلیت‌های C# 8 وNET Core 3. توسعه دهید. شما یاد می‌گیرید که چگونه به معمار نرم افزاری تبدیل شوید که از روی نیازمندی‌های کسب و کار، برنامه‌ی ماژولار می‌سازد، سیستم‌های نرم افزاری را طراحی می‌کند که با استفاده از آخرین قابلیت‌های سی شارپ 8 و NET Core 3. به حداکثر کارایی خودشان می‌رسند و الگوهای معماری سازمانی مختلف را بررسی می‌کند تا مشکل مقیاس پذیری در برنامه‌های وب را حل کند.دانلود رایگان کتابدانلود از سایت آمازونDependency Injection 13. کتاب Dependency Injection تزریق وابستگی: اصول، استفاده‌ها و الگو ها، اول از همه و بیشتر درباره‌ی تزریق وابستگی (DI) است. همچنین کتاب درباره‌ی دات نت نیز می باشد، که آن چنان اهمیت ندارد. اگرچه از #C برای کدهای مثال‌ها استفاده شده است، اما بیشتر مباحث این کتاب را به راحتی می‌توان در زبان‌ها و پلتفرم‌های دیگر نیز به کار برد.تزریق وابستگی(Dependency Injection)، به مجموعه ای از الگوها و اصول مرتبط به هم گویند. DI روشی برای فکر کردن درباره‌ی طراحی کد است تا تکنولوژی به خصوصی. هدف نهایی استفاده از تزریق وابستگی، ساخت برنامه‌ی قابل نگهداری با استفاده از الگوی شی گرایی است.دانلود رایگان کتابدانلود از سایت آمازونPatterns of Enterprise Application Architecture14. کتاب Patterns of Enterprise Application Architectureکتاب Patterns of Enterprise Application Architecture نوشته شده تا پاسخی مستقیم به چالش‌های سختی باشد که توسعه دهندگان برنامه‌های سازمانی با آن روبرو می‌شوند. نویسنده این کتاب، آقای Martin Fowler که طراحی شی‌گرا است، متوجه شد که با وجود تغییرات در تکنولوژی از Smalltalk تا CORBA تا Java تا NET.، همان ایده‌های طراحی پایه می‌توانند وفق پیدا کرده و اعمال شوند تا مشکلات رایج را حل کنند.دانلود رایگان کتابدانلود از سایت آمازونRefactoring: Improving the Design of Existing Code 15. کتاب Refactoring: Improving the Design of Existing Codeدر ویرایش دوم کتاب Refactoring: Improving the Design of Existing Code، فرآیند ریفکتور کردن شرح داده شده است و بیشتر زمانش را بر روی توضیح دادن انجام ریفکتور‌های مختلف که حفظ کننده‌ی رفتار کد هستند، صرف کرده است. این کتاب با یک مثال ساده که کل روند را توصیف می‌کند، شروع می‌شود. سپس تعدادی فصل مقدماتی وجود دارد که بحث‌های گسترده‌تری در مورد refactoring را در می‌گیرد مثل code smells که ریفکتور کردن را پیشنهاد می‌دهد، و نقش تست کردن.دانلود رایگان کتابدانلود از سایت آمازونHead First Design Patterns16. کتاب Head First Design Patternsدر هر لحظه‌ای که کسی دارد با همان مسائل طراحی نرم افزاری که شما با آن روبرو شده اید کلنجار می‌رود، شانس این وجود دارد که پیش از این شخص دیگری مسئله شما را حل کرده است. این نسخه از کتابHead First Design Patterns، که اکنون برای Java 8 نیز به روز شده است، الگوهای آزمایش شده و واقعی را که توسط توسعه دهندگان برای ایجاد نرم افزاری کاربردی، ظریف، قابل استفاده مجدد و انعطاف پذیر استفاده می‌شوند را به شما نشان می‌دهد. زمانی که این کتاب را به پایان رساندید، می‌توانید از بهترین شیوه‌های طراحی و تجربیات کسانی که با هیولای طراحی نرم افزار جنگیده و پیروز شده‌اند، بهره ببرید.دانلود کتاب رایگاندانلود از سایت آمازونSoft Skills: The software developer&#039;s life manual17. کتاب Soft Skills: The software developer&#x27;s life manualکتاب Soft Skills: The software developer&#x27;s life manual، همه چیز از چگونگی گذراندن مراحل مصاحبه و ساخت یک رزومه خفن تا ایجاد یک وبلاگ خیلی موفق و ساختن برند شخصی خودتان، افزایش شدید بازدهی و یادگیری نحوه مقابله با فرسودگی شغلی و حتی سرمایه گذاری در املاک و مستغلات و کاهش وزن را به شما یاد می‌دهد.دانلود رایگان سایتدانلود از سایت آمازونThe Clean Coder18. کتاب The Clean Coderدر کتاب The Clean Coder: A Code of Conduct for Professional Programmers ، برنامه نویس با سابقه و حرفه‌ای Robert C. Martin  (عمو باب خودمون D: ) ، نظم و انضباط، تکنیک ها، ابزارها و  شیوه‌های ساخت یک نرم افزار واقعی را بیان می‌کند. در این کتاب  مشاوره‌های کاربردی در مورد همه چیز از تخمین زدن و کدنویسی تا refactoring و تست کردن بیان شده است. در این کتاب بیشتر از تکنیک‌ها پوشش داده شده است و خیلی از نگرش‌ها بیان شده است. Martin نشان می‌دهد که چگونه می‌توان توسعه نرم افزار را همراه با احترام، عزت نفس و افتخار انجام داد؛ خوب و تمیز کار کنیم؛ صادقانه ارتباط داشته باشیم و تخمین بزنیم؛ تصمیمات سخت بگیریم و بفهمیم که هرچقدر دانش بیشتری داشته باشیم مسئولیت بیشتری نیز بر دوش داریم.دانلود رایگان کتابدانلود از سایت آمازونClean Code19. کتاب Clean Codeکتاب Clean Code به سه بخش تقسیم شده است. بخش اول اصول، الگو‌ها و شیوه‌های نوشتن کد تمیز را شرح می‌دهد. بخش دوم متشکل از چندین مورد مطالعاتی در مورد افزایش پیچیدگی است. هر مورد یک تمرین تمیز سازی کد است که تبدیل اساس یک کد که دارای تعدادی مشکل است به کدی کارامد و بدون ایراد است. قسمت سوم نتیجه گیری نهایی است. یک فصل مجزا که فهرستی از اکتشافات و بوهایی (smells) است که در ضمن ایجاد موارد مطالعاتی جمع آوری شده اند.دانلود رایگان کتابدانلود از سایت آمازونClean Architecture20. کتاب Clean Architectureدانش و مهارت زیادی لازم نیست تا یک برنامه نوشت. بچه‌های دبیرستانی نیز این کار را در دبیرستان انجام می‌دهند. مردان و زنان جوان در دانشگاه با سر هم کردن چند خط کد PHP یا Ruby کسب و کار‌های میلیارد دلاری را شروع کرده اند. برنامه نویسان تازه کار زیادی در دفاتر کاری مکعبی شکلشان در سرتاسر دنیا در بین اسناد حجیم نیازمندی‌های موجود در سیستم‌های issue tracking خود در حال تقلا هستند تا سیستم هایشان را با صرف فعل خواستن توانستن است به کار بیندازند. کدهایی که تولید می‌کنند ممکن است زیبا نباشند ولی کار می‌کنند. کار می‌کند به این دلیل که چیزی بتواند یک بار کار کند، خیلی سخت هم نیست.دانلود رایگان کتابدانلود از سایت آمازون21. کتاب Pro .NET Benchmarkingبا کمک کتاب Pro .NET Benchmarking: The Art of Performance Measurement، به شکل درست بنچمارک‌ها را طراح کنید، معیارهای کلیدی کارایی برنامه‌های دات نت را اندازه گیری کنید و نتایج را تجزیه و تحلیل کنید. این کتاب ده‌ها مورد مطالعاتی ارائه داده است تا در فهم موضوعات پیچیده بنچمارک به شما کمک کند. در این کتاب شما از اشتباهات رایج دوری خواهید کرد، دقت اندازه گیری‌های خود را کنترل خواهید کرد و کارایی نرم افزار خود را بهبود خواهید بخشید.دانلود رایگان کتابدانلود از سایت آمازون22. کتاب Pro .NET Memory Managementدر کتاب  Pro .NET Memory Management: For Better Code, Performance, and Scalability، ساز و کار داخلی مدیریت حافظه NET.، تله‌ها و تکنیک هایی را خواهید فهمید تا به طور موثری از طیف گسترده ای از مشکلات کارایی و مقیاس پذیری در نرم افزار خود دوری کنید. با وجود مدیریت خودکار حافظه در دات نت، فهم چگونگی عملکرد حافظه‌ی دات نت و اینکه چگونه می‌توانید به بهترین شکل، نرم افزاری بنویسید که با حافظه تعامل موثر و کارآمدی داشته باشد، مزایای بسیاری با خود به همراه دارد. این کتاب راهنمای جامع شما برای نوشتن نرم افزار بهتر از طریق درک و کار با مدیر حافظه در NET. است.دانلود رایگان کتابدانلود از سایت آمازون? کانال دات نت زومhttps://t.me/DotNetZoom</description>
                <category>محمد جواد ابراهیمی</category>
                <author>محمد جواد ابراهیمی</author>
                <pubDate>Sat, 06 Jun 2020 15:23:35 +0430</pubDate>
            </item>
                    <item>
                <title>شرط گذاری روی Include ها در EF Core</title>
                <link>https://virgool.io/dotnetzoom/%D8%B4%D8%B1%D8%B7-%DA%AF%D8%B0%D8%A7%D8%B1%DB%8C-%D8%B1%D9%88%DB%8C-include-%D9%87%D8%A7-%D8%AF%D8%B1-ef-core-dh4bz8rhfwos</link>
                <description>این عکس ربطی نداره فقط چون خوشم اومد گذاشتم :)خب بریم سر اصل مطلبسناریویی را در نظر بگیرید که میخواهید لیست Blog‌ها به همراه Post هایشان که شامل کلمه خاصی است را کلاینت باز گردانید. در این احتمالا چنین کدی به نظرتان خواهد آمد.var list = dbContext.Blogs
    .AsNoTracking()
    .Include(p =&gt; p.Posts.Where(p =&gt; p.Title.Contains(&amp;quottest title&amp;quot)))
    .ToList();
return Json(list);این کد تا قبل از EFCore 5.0 پیش نمایش 3 به خطای زیر منجر میشود چرا که EFCore از شرط گذاری روی Include‌ها پشتیبانی نمی‌کند.System.InvalidOperationException: &#039;Lambda expression used inside Include is not valid.&#039;پس مجبوریم همه رکورد‌های Include را از دیتابیس خوانده و سپس آنها را در حافظه فیلتر کنیم.var list = dbContext.Blogs
    .AsNoTracking()
    .Include(e =&gt; e.Posts)
    .ToList();
list.ForEach(p =&gt; p.Posts = p.Posts.Where(p =&gt; p.Title.Contains(&amp;quottest title&amp;quot)).ToList());این روش سربار بسیار زیادی دارد و بسته به تعداد رکورد‌ها و ستون‌های Post حجم زیادی از دیتای غیر لازم را از دیتابیس میخواند و تخصیص حافظه (memory allocation) اضافی و زیادی را به همراه دارد. مثلا اگر 100 Blog داشته باشیم که هرکدام 100 Post داشته باشد و فقط یکی از Post‌ها شرط مورد نظر را داشته باشد، بدین ترتیب 100 * 100 منهای 1، رکورد اضافی واکشی خواهد شد یعنی برابر ‭9,999‬! (می توان با لحاظ کردن تعداد و حجم ستون‌های اضافی نیز، وخامت اوضاع را درک کرد)همچنین اگر به منظور غیر read-only (عدم استفاده از AsNoTracking)  داده‌ها را لود کرده باشید با شرطی که داخل ForEach اعمال می‌شود. رکورد هایی که فیلتر میشوند به صورت Deleted در ChangeTracker علامت گذاری میشوند که میتواند مشکل ساز نیز باشد.برای حل این مشکل چندین روش وجود دارد:1- توسط یک تایپ دلخواه (anonymous یا dto) واکشی را به صورت Projection انجام دهیم و Post‌ها را فیلتر کنیم.var list = dbContext.Blogs
    .AsNoTracking()
    .Select(p =&gt; new
    {
        p.Id,
        p.Name,
        Posts = p.Posts.Where(p =&gt; p.Title.Contains(&amp;quottest title&amp;quot)).ToList()
}).ToList();این دستور، کوئری SQL زیر را تولید میکند.SELECT [b].[Id], [b].[Name], [t].[Id], [t].[BlogId], [t].[Description], [t].[Title]
FROM [Blogs] AS [
LEFT JOIN (
    SELECT [p].[Id], [p].[BlogId], [p].[Description], [p].[Title]
    FROM [Posts] AS [p]
    WHERE CHARINDEX(N&#039;test title&#039;, [p].[Title]) &gt; 0
) AS [t] ON [b].[Id] = [t].[BlogId]
ORDER BY [b].[Id], [t].[Id]معایب این روش:در صورت نیاز به ویرایش (عدم استفاده از AsNoTracking) بدلیل استفاده از anonymous به جای Blog، هیچ شی Blog ایی در ChangeTracker ثبت نخواهد شد ولی اشیا Post در ChangeTracker ثبت خواهند شد. در نتیجه تنها 1 شی در ChangeTracker اضافه خواهد شد.کد نویسی را کثیف میکند مخصوصا اگر نیاز به شرط گذاری روی چندین Navigation Collection تو در تو داشته باشید.برای جلوگیری از این کثیف شدن میتوان از قابلیت Projection کتابخانه AutoMapper استفاده کرد. کوئری تولید شده و عملکرد آن عینا مشابه همین روش است ولی کد تمیز‌تری را موجب می‌شود. ( از نظر سرعت مقدار کمی کند‌تر است  - انتهای مقاله بنچمارک آن را میتوانید مشاهده کنید)2- از قابلیت IncludeFilter کتابخانه  Z.EntityFramework.Plus.EFCore استفاده کنیماین کتابخانه امکانات بسیار مفیدی را ارائه میدهد و شخصا برای پروژه‌های واقعی و بزرگ آن را پیشنهاد میدهم. اگر از امکانات آن به جا استفاده شود تاثیر بسیار زیادی روی پرفرمنس پروژه خواهد گذاشت (توصیه میکنم حتما داکیومنت آن را مطالعه کنید)این کتابخانه کاملا رایگان است و از EFCore و EF6 (در یک پکیج جداگانه) پشتیبانی میکند. شرکت مالک آن (ZZZ) یک کتابخانه دیگر به نام  Z.EntityFramework.Extensions.EFCore نیز دارد که امکانات بیشتری ارائه میدهد ولی رایگان نیست.در این روش خواهیم داشتvar list = dbContext.Blogs
    .AsNoTracking()
    .IncludeFilter(e =&gt; e.Posts.Where(p =&gt; p.Title.Contains(&amp;quottest tile&amp;quot)))
    .ToList();این دستور کوئری SQL زیر را تولید میکند-- EF+ Query Future: 1 of 2
SELECT [b].[Id], [b].[Name]
FROM [Blogs] AS [b]
;
-- EF+ Query Future: 2 of 2
SELECT [t].[Id], [t].[BlogId], [t].[Description], [t].[Title]
FROM [Blogs] AS [b]
INNER JOIN (
    SELECT [p].[Id], [p].[BlogId], [p].[Description], [p].[Title]
    FROM [Posts] AS [p]
    WHERE CHARINDEX(N&#039;test title&#039;, [p].[Title]) &gt; 0
) AS [t] ON [b].[Id] = [t].[BlogId]
;همانطور که میبینید این دستور، 2 کوئری را اجرا میکند. سرعت آن از روش قبلی کمی کند‌تر است و memory allocation بیشتری انجام میدهد.در صورت عدم استفاده از AsNoTracking، اشیا Blog را نیز ثبت میکند درنتیجه تعداد 101 ابجکت (100 Blog و 1 Post) به ChangeTracker اضافه خواهند شد.کد نویسی تمیزتر و راحت‌تری سمت سی شارپ دارد.این روش در EF6 نیز قابل استفاده است.3- کمبود این قابلیت در EFCore بسیار حس میشد (در NHibernate از قدیم این امکان وجود داشت) تا اینکه نهایتا در EFCore 5.0 پیش نمایش 3 (آخرین نسخه در حال حاضر) این قابلیت به EFCore اضافه شد.برای استفاده از آن نیاز به هیچ کد اضافه ای نیست و به صورت معمول میتوان از متد Include همراه با شرط استفاده کرد.var list = dbContext.Blogs
    .AsNoTracking()
    .Include(p =&gt; p.Posts.Where(p =&gt; p.Title.Contains(&amp;quottest title&amp;quot)))
    .ToList();این دستور کوئری SQL زیر را تولید میکند.SELECT [b].[Id], [b].[Name], [t].[Id], [t].[BlogId], [t].[Description], [t].[Title]
FROM [Blogs] AS [b]
LEFT JOIN (
    SELECT [p].[Id], [p].[BlogId], [p].[Description], [p].[Title]
    FROM [Posts] AS [p]
    WHERE CHARINDEX(N&#039;test title&#039;, [p].[Title]) &gt; 0
) AS [t] ON [b].[Id] = [t].[BlogId]
ORDER BY [b].[Id], [t].[Id]این روش بسیار بهینه است و از روش قبلی (دوم) کمی سریع‌تر بوده و memory allocation کمتری (نزدیک به روش اول) دارد.در صورت عدم استفاده از AsNoTracking، مانند قبلی عمل میکند درنتیجه تعداد 101 ابجکت به ChangeTracker اضافه خواهند شد.کد نویسی تمیزتر و راحت‌تری سمت سی شارپ دارد.بنچمارک مقایسه این روش‌ها را میتوانید از ریپازیتوری گیتهاب زیر دریافت کنید.https://github.com/mjebrahimi/EFCore-Include-Filtering-Benchmarkتصویر زیر نتایج آن را نشان میدهد. این شاخص‌ها بر اساس تعداد رکورد ها، ستون‌ها و حجم دیتای واکشی شده از دیتابیس میتواند متفاوت باشد ولی نتیجه آن از لحاظ مقایسه ای مشابه همین خواهد بود.? کانال دات نت زومhttps://t.me/DotNetZoom</description>
                <category>محمد جواد ابراهیمی</category>
                <author>محمد جواد ابراهیمی</author>
                <pubDate>Sun, 26 Apr 2020 21:42:39 +0430</pubDate>
            </item>
                    <item>
                <title>دات نت 5 و 5 ASPNET Core و EFCore 5 پیش نمایش 3 منتشر شد</title>
                <link>https://virgool.io/dotnetzoom/%D8%AF%D8%A7%D8%AA-%D9%86%D8%AA-5-%D9%88-5-aspnet-core-%D9%88-efcore-5-%D9%BE%DB%8C%D8%B4-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-3-%D9%85%D9%86%D8%AA%D8%B4%D8%B1-%D8%B4%D8%AF-pwyxrxe9tsul</link>
                <description>دات نت 5 و 5 ASPNET Core و EFCore 5 پیش نمایش 3 منتشر شداین آپدیت با چند تغییر کاربردی و مهم همراه بود که الان با هم بررسیشون میکنیم. بقیه تغییراتشون اکثرا بهبود و رفع باگ بوده یا موارد low level و غیر مهم. 1️⃣ مشکل ReferenceLoopHandling مربوط به System.Text.Json حل شد ✌️2️⃣ چند extension متد روی HttpClient اضافه شده که مستقیما خروجی Json رو Deserialize میکنه ?برای استفاده از این متد ها نیازه پکیج زیر رو نصب کنینPM&gt; Install-Package System.Net.Http.Json مثال یه درخواست GET که خروجی Json میده و میخوایم به لیستی از Person ها Deserialize اش کنیمreturn await client.GetJsonAsync&lt;List&lt;Person&gt;&gt;(&amp;quot/api/people&amp;quot);3️⃣ و سرانجام بلاخره قابلیت Filter کردن Include ها به EFCore اضافه شد. (هرچند زودتر باید میشد ولی بازم دمشون گرم خیلی لازم بود✌️)تا قبل از این نسخه امکان اینکه روی فیلد های چیزی که Include میکنیم شرط بذاریم وجود نداشت. در نتیجه اگه لازم بود فقط 2 رکورد از 100 رکورد موجود رو Include کنیم نمیشد و همش باید از دیتابیس واکشی میشد که این قضیه سرباز بسیار زیادی داشت.برای حل این مشکل چندین راه حل وجود داشت:1- واکشی اطلاعات به صورت دستی در قالب یه Type دلخواه و شرط گذاری روی اونها2- استفاده از Projection موجود در AutoMapper روی EFCore 3- و بهترین راه اینکه از متد IncludeFilter کتابخونه زیر که مال شرکت ZZZ هست استفاده کنیمPM&gt; Install-Package Z.EntityFramework.Plus.EFCore این کتابخونه رایگانه (با اون یکی نسخه که پولیه اشتباهش نگیرین) و امکانات بسیار خوبی میده و شخصا برای پروژه های واقعی و بزرگ پیشنهادش میکنم. اگه به جا ازش استفاده بشه تاثیر زیادی روی پرفرمنس پروژه میزاره (پیشنهاد میکنم حتما داکیومنتش رو بخونین)واقعا کمبود این قابلیت خیلی حس میشد تا اینکه بلاخره توی این آپدیت به EFCore اضافه شد و حالا میتونیم براحتی ازش استفاده کنیمvar blogs = context.Blogs
    .Include(e =&gt; e.Posts.Where(p =&gt; p.Title.Contains(&amp;quotCheese&amp;quot)))
    .ToList();اطلاعات بیشتر:Announcing .NET 5.0 Preview 3ASP.NET Core updates in .NET 5 Preview 3Announcing Entity Framework Core 5.0 Preview 3? کانال دات نت زومhttps://t.me/DotNetZoom</description>
                <category>محمد جواد ابراهیمی</category>
                <author>محمد جواد ابراهیمی</author>
                <pubDate>Sat, 25 Apr 2020 21:32:30 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش ویدئویی Microservices در ASP.NET Core  (سری سوم)</title>
                <link>https://virgool.io/dotnetzoom/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%88%DB%8C%D8%AF%D8%A6%D9%88%DB%8C%DB%8C-microservices-%D8%AF%D8%B1-aspnet-core-%D8%B3%D8%B1%DB%8C-%D8%B3%D9%88%D9%85-ovkmrexearax</link>
                <description>لیست تکنولوژی های استفاده شدهموضوعات Microservices و Distributed System ها موضوعاتی نیستند که با یک یا چند مقاله جسته و گریخته بتوان آنها را فرا گرفت. اینها موارد بزرگی هستند و نکات، تکنیک ها و ابزار های زیادی دارند که یاد گرفتن آنها نیازمند یک سری آموزش پیوسته و جامع است.سری آموزش ویدئویی Distributed .NET Core (DShop) یکی از بهترین آموزش های ویدئویی منابع برای یادگیری Microservice و Distributed System ها در NET Core. است که به صورت عملی و گام به گام همراه با مثال و سورس آن در گیتهاب منتشر شده است. این آموزش همراه زیرنویس انگلیسی است (از قسمت Caption در Youtube)0- Distributed .NET Core (DShop) - Teaser1- Distributed .NET Core (DShop) - Episode 1 [Intro, HTTP requests flow, Infrastructure with Docker]2- Distributed .NET Core (DShop) - Episode 2 [CQRS - Write side, Discounts service, MongoDB repository]3- Distributed .NET Core (DShop) - Episode 3 [Subscribing RabbitMQ messages, API gateway]4- Distributed .NET Core (DShop) - Episode 4 [Asynchronous microservices integration via events]5- Distributed .NET Core (DShop) - Episode 5 [CQRS - Read side, Internal HTTP communication]6- Distributed .NET Core (DShop) - Episode 6 [Service discovery &amp;amp;amp;amp;amp; Load balancing with Consul + Fabio]7- Distributed .NET Core (DShop) - Episode 7 [Handling asynchronous requests, SignalR, Polly]8- Distributed .NET Core (DShop) - Episode 8 [Distributed transactions, 2PC, Event Choreography, Saga]9- Distributed .NET Core (DShop) - Episode 9 [Vault secrets, Seq logging, Jaeger distributed tracing]10- Distributed .NET Core (DShop) - Episode 10 [Metrics with AppMetrics, InfluxDB, Prometheus, Grafana]11- Distributed .NET Core (DShop) - Episode 11 [Travis CI pipelines, custom MyGet feeds]12- Distributed .NET Core (DShop) - Episode 12 [Docker basics, Docker Hub, docker-compose]13- Distributed .NET Core (DShop) - Episode 13 [Integration tests with xUnit, Web API, Mongo, RabbitMQ]14- Distributed .NET Core (DShop) - Episode 14 [Consumer-driven contract testing with Pact]15- Distributed .NET Core (DShop) - Episode 15 [Orchestration with Portainer, Kubernetes and Rancher]سورس پروژه آموزشی در گیتهابhttps://github.com/devmentors/DNC-DShopدر این سری آموزشی موضوعات زیر پوشش داده است✔️Microservices ✔️DistributedSystem ✔️DDD ✔️CQRS  ✔️Docker ✔️Container ✔️ASPNETCore ✔️SqlServer ✔️Redis ✔️NoSql ✔️MongoDb ✔️InfluxDb ✔️SignalR ✔️JWT ✔️RabbitMQ ✔️Grafana ✔️AppMetrics ✔️Prometheus ✔️Jaeger ✔️Seq ✔️ELK (ElasticSearch) ✔️ApiGateway ✔️Consul ✔️Kubernetesاین سری آموزشی رو از دست ندین. ضمنا لیست کاملتر این منابع رو در ریپازیتوری Awesome مربوطه به آموزش Microservices در NET Core. میتونین پیدا کنین https://github.com/mjebrahimi/Awesome-Microservices-NetCore  https://virgool.io/@mjebrahimi/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-microservices-%D8%AF%D8%B1-aspnet-core-%D8%B3%D8%B1%DB%8C-%D8%A7%D9%88%D9%84-c2vqnhn8gfku  https://virgool.io/@mjebrahimi/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-microservices-%D8%AF%D8%B1-aspnet-core-%D8%B3%D8%B1%DB%8C-%D8%AF%D9%88%D9%85-fcnmc3zmuh5a ? کانال دات نت زومhttps://t.me/DotNetZoom</description>
                <category>محمد جواد ابراهیمی</category>
                <author>محمد جواد ابراهیمی</author>
                <pubDate>Thu, 23 Apr 2020 20:01:40 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش Microservices در ASP.NET Core  (سری دوم)</title>
                <link>https://virgool.io/dotnetzoom/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-microservices-%D8%AF%D8%B1-aspnet-core-%D8%B3%D8%B1%DB%8C-%D8%AF%D9%88%D9%85-fcnmc3zmuh5a</link>
                <description>نمایی از ساختار معماری Microserviceموضوعات Microservices و Distributed System ها موضوعاتی نیستند که با یک یا چند مقاله جسته و گریخته بتوان آنها را فرا گرفت. اینها موارد بزرگی هستند و نکات، تکنیک ها و ابزار های زیادی دارند که یاد گرفتن آنها نیازمند یک سری آموزش پیوسته و جامع است.سری آموزش Building microservices through Event Driven Architecture یکی از بهترین منابع برای یادگیری Microservice ها در NET Core. است که به صورت عملی و گام به گام همراه با مثال و سورس آن در گیتهاب منتشر شده است.1- Building microservices through Event Driven Architecture part1 : application specific business rules2- Building microservices through Event Driven Architecture part2 : domain objects and business rules3- Building microservices through Event Driven Architecture part3: Presenters, Views, and Controllers4- Building microservices through Event Driven Architecture part4: repositories5- Building microservices through Event Driven Architecture part5: dockerization (Web Api Core and SQL Server Linux)6- Building microservices through Event Driven Architecture part7: Implementing EventSourcing on Domain Model7- Building microservices through Event Driven Architecture part8: Implementing EventSourcing on Repositories8- Building microservices through Event Driven Architecture part9: Implementing EventSourcing on Application9- Building microservices through Event Driven Architecture part10: Handling updates10- Building microservices through Event Driven Architecture part11: Run Unit tests inside a docker containerسورس پروژه آموزشی در گیتهابhttps://github.com/logcorner/LogCorner.EduSync.Speech.Command/در این سری آموزشی موضوعات زیر پوشش داده است✔️Microservices ✔️CleanArchitecture ✔️DDD ✔️CQRS ✔️EventSourcing ✔️TDD ✔️Docker ✔️Container ✔️EFCore ✔️ASPNETCoreاین سری آموزشی رو از دست ندین. ضمنا لیست کاملتر این منابع رو در ریپازیتوری Awesome مربوطه به آموزش Microservices در NET Core. میتونین پیدا کنین https://github.com/mjebrahimi/Awesome-Microservices-NetCore  https://virgool.io/@mjebrahimi/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-microservices-%D8%AF%D8%B1-aspnet-core-%D8%B3%D8%B1%DB%8C-%D8%A7%D9%88%D9%84-c2vqnhn8gfku  https://virgool.io/@mjebrahimi/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%88%DB%8C%D8%AF%D8%A6%D9%88%DB%8C%DB%8C-microservices-%D8%AF%D8%B1-aspnet-core-%D8%B3%D8%B1%DB%8C-%D8%B3%D9%88%D9%85-ovkmrexearax ? کانال دات نت زومhttps://t.me/DotNetZoom</description>
                <category>محمد جواد ابراهیمی</category>
                <author>محمد جواد ابراهیمی</author>
                <pubDate>Mon, 20 Apr 2020 21:28:13 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش Microservices در ASP.NET Core (سری اول)</title>
                <link>https://virgool.io/dotnetzoom/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-microservices-%D8%AF%D8%B1-aspnet-core-%D8%B3%D8%B1%DB%8C-%D8%A7%D9%88%D9%84-c2vqnhn8gfku</link>
                <description>نمایی از ساختار معماری Microserviceموضوعات Microservices و Distributed System ها موضوعاتی نیستند که با یک یا چند مقاله جسته و گریخته بتوان آنها را فرا گرفت. اینها موارد بزرگی هستند و نکات، تکنیک ها و ابزار های زیادی دارند که یاد گرفتن آنها نیازمند یک سری آموزش پیوسته و جامع است.سری آموزش Building Microservices On .NET Core یکی از بهترین منابع برای یادگیری Microservice ها در NET Core. است که به صورت عملی و گام به گام همراه با مثال و سورس آن در گیتهاب منتشر شده است.1- Building Microservices On .NET Core – Part 1 The Plan2- Building Microservices On .NET Core – Part 2 Shaping microservice internal architecture with CQRS and MediatR3- Building Microservices On .NET Core – Part 3 Service Discovery with Eureka4- Building Microservices On .NET Core – Part 4 Building API Gateways With Ocelot5- Building Microservices On .NET Core – Part 5 Marten An Ideal Repository For Your Domain Aggregates6- Building Microservices On .NET Core – Part 6 Real time server client communication with SignalR and RabbitMQ7- Building Microservices On .NET Core – Part 7 Transactional Outbox with RabbitMQسورس پروژه آموزشی در گیتهابhttps://github.com/asc-lab/dotnetcore-microservices-pocدیگر مقالات مرتبطMicroservicesFrom monolith to microservices – to migrate or not to migrate?UI in Microservices World – Micro Frontends pattern and Web ComponentsHow to create better code using Domain-Driven DesignCQRS and Event Sourcing Intro For Developersدر این سری آموزشی موضوعات زیر پوشش داده است✔️Microservices ✔️CQRS ✔️EventSourcing ✔️MediatR ✔️Marten ✔️ServiceDiscovery ✔️Eureka ✔️ApiGateway ✔️Ocelot ✔️DDD ✔️RabbitMQ ✔️Dapper ✔️Docker ✔️Container ✔️ASPNETCoreاین سری آموزشی رو از دست ندین. ضمنا لیست کاملتر این منابع رو در ریپازیتوری Awesome مربوطه به آموزش Microservices در NET Core. میتونین پیدا کنین https://github.com/mjebrahimi/Awesome-Microservices-NetCore  https://virgool.io/@mjebrahimi/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-microservices-%D8%AF%D8%B1-aspnet-core-%D8%B3%D8%B1%DB%8C-%D8%AF%D9%88%D9%85-fcnmc3zmuh5a  https://virgool.io/@mjebrahimi/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%88%DB%8C%D8%AF%D8%A6%D9%88%DB%8C%DB%8C-microservices-%D8%AF%D8%B1-aspnet-core-%D8%B3%D8%B1%DB%8C-%D8%B3%D9%88%D9%85-ovkmrexearax ? کانال دات نت زومhttps://t.me/DotNetZoom</description>
                <category>محمد جواد ابراهیمی</category>
                <author>محمد جواد ابراهیمی</author>
                <pubDate>Mon, 20 Apr 2020 21:02:52 +0430</pubDate>
            </item>
                    <item>
                <title>مشاهده تاریخچه فعالیت های یک ریپازیتوری یا یک شخص در گیتهاب با GitMemory</title>
                <link>https://virgool.io/dotnetzoom/%D9%85%D8%B4%D8%A7%D9%87%D8%AF%D9%87-%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE%DA%86%D9%87-%D9%81%D8%B9%D8%A7%D9%84%DB%8C%D8%AA-%D9%87%D8%A7%DB%8C-%DB%8C%DA%A9-%D8%B1%DB%8C%D9%BE%D8%A7%D8%B2%DB%8C%D8%AA%D9%88%D8%B1%DB%8C-%DB%8C%D8%A7-%DB%8C%DA%A9-%D8%B4%D8%AE%D8%B5-%D8%AF%D8%B1-%DA%AF%DB%8C%D8%AA%D9%87%D8%A7%D8%A8-%D8%A8%D8%A7-gitmemory-vicvaqvcmiox</link>
                <description>مشاهده تاریخچه فعالیت های یک ریپازیتوری یا یک شخص در گیتهاب با GitMemoryتوسط این سایت میتونین تاریخچه کاملی از فعالیت های یک شخص توی Gtihub از جمله:نوع و میزان فعالیت هاش مثل commit - push - issue - pull request و... هایی که انجام دادهاینکه چه ریپازیتوری هایی رو دنبال میکنه و به کدوما Star دادهچه Contribute هایی داشته - چه Issue هایی باز کرده و چه Pull Request هایی زدهو... رو مشاهده کنین مثلا این لینک فعالیت های اخیر Marc Gravell (نویسنده کتابخانه های معروف Dapper و SE.Redis) رو نشون میدهhttps://www.gitmemory.com/mgravellیا مثلا یک ریپازیتوری Github اخیرا چه فعالیت هایی داشته از جمله:نمودار  Star های دریافت کردهتوی یک سال اخیر چه کامیت هایی روش زده شدهچندتا Issue باز و چندتا بسته دارهو ... رو مشاهده کنینمثلا این لینک فعالیت های اخیر کتابخونه log4net که به تازگی بازنشستگی خودش رو اعلام کرد نشون میدهhttps://www.gitmemory.com/apache/logging-log4netتوی همین لینک میشه عدم فعالیت توی یک سال اخیر این کتابخونه رو به وضوح دید، مثلا توی یک سال اخیر هیچ کامیتی نداشتهمشابه همین اتفاق برای کتابخونه CacheManager هم رخ داده و به احتمال زیاد آینده ای نخواهد داشت، به همین دلیل هست که پیشنهاد میکنم به جاش از EasyCaching استفاده کنین مثلا CacheManager تو یک سال اخیر فقط 4تا کامیت داشته درصورتی که EasyCaching تعداد 138 تاهمچنین CacheManager در حال حاضر 52 ایشو باز داره ولی EasyCaching فقط 8 تاسایت GitCompareاین سایت هم هم گزارش خوبی در جهت مقایسه بین فعالیت های اخیر دو یا چند ریپازیتوری بهتون میده. مثلا لینک زیر مقایسه CacheManager و EasyCaching هستhttps://gitcompare.com/report?packages=dotnetcore%2Feasycaching&amp;amp;amp;packages=michaco%2Fcachemanager? در نهایت این مقایسه ها بهتون کمک میکنه بتونین آینده نگرانه تر کتابخونه ها و تکنولوژی های مورد نظرتون رو انتخاب کنین ? کانال دات نت زومhttps://t.me/DotNetZoom</description>
                <category>محمد جواد ابراهیمی</category>
                <author>محمد جواد ابراهیمی</author>
                <pubDate>Tue, 07 Apr 2020 21:13:21 +0430</pubDate>
            </item>
                    <item>
                <title>ساخت دیتابیس یکبار مصرف Mongo بدون نیاز به نصب آن!</title>
                <link>https://virgool.io/dotnetzoom/%D8%B3%D8%A7%D8%AE%D8%AA-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%DB%8C%DA%A9%D8%A8%D8%A7%D8%B1-%D9%85%D8%B5%D8%B1%D9%81-mongo-%D8%A8%D8%AF%D9%88%D9%86-%D9%86%DB%8C%D8%A7%D8%B2-%D8%A8%D9%87-%D9%86%D8%B5%D8%A8-%D8%A2%D9%86-z0rus7phdxju</link>
                <description>ساخت دیتابیس یکبار مصرف Mongo بدون نیاز به نصب آن!کتابخانه Mongo2Go یه کتابخونه عالی برای Integration Testing پروژه هایی هست که از MongoDb استفاده میکنند? توسط این کتابخونه می تونین دیتابیس های MongoDb رو بدون نیاز به نصب اون به صورت یکبار مصرف ایجاد کنین، یعنی یه دیتابیس موقت (توی پوشه Temp سیستم عامل) براتون میسازه و در آخر وقتی کارتون باهاش تموم شد اون رو حذف میکنه. در نتیجه برای Integration Testing بسیار مناسب و کاربردی هست.? قاعدتا برای استفاده از مونگو باید ورژن متناسب با سیستم عاملتون رو نصب و کانفیگ کنین یا راحت تر اینکه اون رو توسط Docker راه اندازی کنین ولی توسط این کتابخونه دیگه نیازی به نصب اون ندارین چون فایل های باینری MonogDb رو داخل خودش داره (واسه همین یه مقدار حجمش زیاده، 69 مگابایت) ?طرز کار باهاش خیلی سادس فقط کافیه ناگتش رو نصب کنینInstall-Package Mongo2Goو به صورت زیر ازش استفاده کنینusing (var runner = MongoDbRunner.Start())
{
     var client = new MongoClient(runner.ConnectionString);
     var database = client.GetDatabase(&amp;quotIntegrationTest&amp;quot);
     var collection = database.GetCollection&lt;TestDocument&gt;(&amp;quotTestCollection&amp;quot);
     //Just use it!
}ریپازیتوری گیتهاب :https://github.com/Mongo2Go/Mongo2Go? کانال دات نت زومhttps://t.me/DotNetZoom</description>
                <category>محمد جواد ابراهیمی</category>
                <author>محمد جواد ابراهیمی</author>
                <pubDate>Thu, 12 Mar 2020 23:13:54 +0330</pubDate>
            </item>
                    <item>
                <title>اگه هنوز براتون سواله که MongoDb یا مثلا SqlServer ...</title>
                <link>https://virgool.io/dotnetzoom/%D8%A7%DA%AF%D9%87-%D9%87%D9%86%D9%88%D8%B2-%D8%A8%D8%B1%D8%A7%D8%AA%D9%88%D9%86-%D8%B3%D9%88%D8%A7%D9%84%D9%87-%DA%A9%D9%87-mongodb-%DB%8C%D8%A7-%D9%85%D8%AB%D9%84%D8%A7-sqlserver-qoife05ozzae</link>
                <description>اگه هنوز براتون سواله که MongoDb یا مثلا SqlServer ...با یه سرچ توی مقالات فارسی میتونین ببینین که متاسفانه هیچ مقاله درست و درمونی پیدا نمیشه که جواب این سوال رو داده باشه، اکثرا مقالاتی مبهم و کلی گویی مواجه میشین که در آخر هم جواب سوال رو نتونسته بده. مابقی هم که الی ماشاالله کپی از همدیگه!توی این پست میخوام به صورت علمی به قضیه نگاه کنیم و ببینیم که چرا و کجا ها Mongo انتخاب بهتری هست و کجا ها نیست. قبلش اما باید CAP Theorem (تئوری CAP) رو بدونین.اگه نمیدونین تئوری CAP چیه اول اینجا رو مطالعه کنینوقتی از نگاه تئوری CAP دیتابیس mongo رو بررسی کنیممونگو تو شرایط مختلف trade-off متفاوتی از C و A و P رو فراهم میکنه?از نگاه Consistency مثلا وقتی به صورت Distribute ازش استفاده نشه Strong Consistent هست پس Consistency رو دارهولی وقتی به صورت Distribute ازش استفاده بشه (مثلا دیتا از replica ها خونده بشه) Eventual Consistent هست پس Consistency رو فدا میکنه?از نگاه Availabilityوقتی از مونگو به صورت توزیع شده (Replica-Sets) استفاده بشه، high availability خوبی رو فراهم و در صورت دان شدن Primary Node سریعا یک node دیگه جایگزین میشه ولی در این حالت Consistency فدای Availability میشه?از نگاه Partition Toleranceتوسط قابلیت Replica-Sets عملا Partition Tolerance فراهم است منتها تا زمانی که &quot;بیش از نیمی&quot; از Node ها به یک دیگر متصل باشند. در این حالت سیستم Primary Node جدید رو انتخاب میکنهولی اگر Node های ثانویه به اندازه کافی نباشند همچنان امکان read وجود داره ولی دیگه امکان write وجود نداره. پس دراین حالت Availability برای Consistency فدا میشه ?نتیجه گیری : اگر توزیع نشده استفاده بشه : CA اگر توزیع شده باشه ولی اکثریت node ها در دسترس باشند : AP اگر توزیع شده باشه ولی کمتر از نصف node ها در دسترس باشند : CP✅ در نهایت ویژگی های خوبی که باعث میشه Mongo انتخاب بهتری نسبت به دیتابیس SQL/Relational باشه ایناس :1️⃣ شما نیاز به مقیاس پذیری بالا به صورت Horizontal Scaling دارید (توسط قابلیت Replica-Set و Sharding مونگو)در این حالت معمولا Consistency فدا میشه پس باید دقت داشت که این روش برای دیتا های حساس که به یکپارچگی و ثبات بالا نیاز دارند مناسب نیست، مثل برنامه های حسابداری و بانکی2️⃣ دیتای شما ساختار (Schema) مشخصی نداره و به انعطاف پذیری بالا نیاز دارید (به خاطر Schema-less بودن مونگو)در این حالت باید توجه داشت که متفاوت بودن ساختار رکورد (داکیومنت) ها میتونه احتمال خطا توی سیستم رو افزایش بده پس باید در سطح کد نویسی حواسمون بهش باشه3️⃣ دیتابیس Mongo برای ذخیره سازی و بازیابی دیتا های حجیم و &quot;مرتبط&quot; بسیار مناسبه و پرفرمنس بالایی داره، چون تمام دیتای مرتبط به یک سند داخل خودش ذخیره میشه و نیاز به Join خیلی کمتر احساس میشه4️⃣ دیتابیس Mongo به خاطر ساختار و سادگی ایی که داره Performance Tuning و Optimization های حرفه ای که نیاز به DBA داشته باشه خیلی کمتر توش احساس میشه پس اگه میخواین خیلی درگیر کار های DBA ایی نشین Mongo گزینه مناسبیه? کانال دات نت زومhttps://t.me/DotNetZoom</description>
                <category>محمد جواد ابراهیمی</category>
                <author>محمد جواد ابراهیمی</author>
                <pubDate>Wed, 11 Mar 2020 22:09:36 +0330</pubDate>
            </item>
                    <item>
                <title>مهم ترین اخبار رویداد NET Conf. با موضوع Focus on Blazor</title>
                <link>https://virgool.io/dotnetzoom/%D9%85%D9%87%D9%85-%D8%AA%D8%B1%DB%8C%D9%86-%D8%A7%D8%AE%D8%A8%D8%A7%D8%B1-%D8%B1%D9%88%DB%8C%D8%AF%D8%A7%D8%AF-net-conf-%D8%A8%D8%A7-%D9%85%D9%88%D8%B6%D9%88%D8%B9-focus-on-blazor-vabgh2fyshvu</link>
                <description>مهم ترین اخبار رویداد NET Conf. با موضوع Focus on Blazorدو روز پیش رویداد یک روزه دات نت کانف با محوریت تمرکز بر روی Blazor برگزار شد و اخبار و آموزش های جدید در اون منتشر شد از جمله :? معرفی امکانات جدیدامکانات جدیدی که قرار است تا ماه May به Blazor WebAssembly (همان Client-Side Blazor سابق) اضافه شود.لیست امکانات معرفی شدهRuns on .NET Core 3.1 and is compatible with .NET Standard 2.1Blazor packages will be versioned as 3.2 because they are not part of .NET Core 3.1 (LTS)WebSockets and SingalR clientSupport debugging in Visual Studio and browser dev toolsAutomatic rebuild when something changesIntermediate Language (IL) trimmingBrotli compression (already supported by ASP.NET Core)Static web assets integrationAuthentication optionsLocalizationنمونه برنامه Desktop ساخته شده با Blazor? معرفی نمونه پروژه ای از ترکیب Blazor + Electron که امکان ساخت برنامه های مدرن و سریع Desktop ایی به صورت Cross-Platform توسط Blazor و تکنولوژی های Web ایی را فراهم می سازد.https://blog.stevensanderson.com/2019/11/01/exploring-lighter-alternatives-to-electron-for-hosting-a-blazor-desktop-app/ریپازیتوری گیتهاب :https://aka.ms/blazorelectron? معرفی نمونه پروژه ای از ترکیب Blazor + WebWindow که امکان ساخت برنامه های مانند پروژه قبلی را فراهم می سازد با این تفاوت که سبک تر است و حجم کمتری دارد. WebWindow یک پروژه (در حال حاضرآزمایشی) است که توسط Steve Sanderson خالق Blazor ساخته شده و جایگزین الکترون برای برنامه‌های NET Core. خواهد شد و نسبت به الکترون سبک تر و کم حجم تر است.https://aka.ms/webwindowنمونه برنامه موبایل ساخته شده با Blazor و Xamarin? معرفی پروژه Mobile Blazor Bindingsکه امکان ساخت برنامه های Native موبایل را توسط Razor و #C و CSS فراهم می سازد. همچنین به کامپوننت های بومی موبایل مانند GPS و Media دسترسی دارد. در این روش از کامپوننت های مبنی بر Xamarin Forms استفاده می شوداطلاعات بیشتر و نمونه اپ های ساخته شدهhttps://devblogs.microsoft.com/aspnet/mobile-blazor-bindings-experiment/https://docs.microsoft.com/en-us/mobile-blazor-bindings/https://github.com/xamarin/MobileBlazorBindingsنمونه تست نویسی برای کامپوننت های Blazor? امکان تست نویسی برای Blazorقابلیت Unit Test نویسی برای کامپوننت های Blazor هم اکنون در حد نمونه اولیه پیاده سازی شده است و به زودی تکمیل می شود.اطلاعات بیشتر و ریپازیتوری کتابخانه مربوطهhttps://blog.stevensanderson.com/2019/08/29/blazor-unit-testing-prototype/https://github.com/egil/razor-components-testing-libraryکاهش حجم برنام های Blazor WebAssembly? کاهش حجم برنام های Blazor WebAssemblyتوسط قابلیت Assembly trimming می توان حجم خروجی برنامه های Blazor WebAssembly را کاهش داد. به طور مثال حجم نسخه پیشفرض فعلی یک اپ Blazor WebAassembly حدود 2 مگابایت است که تیم Blazor وعده داده در انتشار ماه May سال جاری، حجم آن را تا 1.5 مگابایت کاهش دهد.❇️ ویدئو های رویداد  NET Conf. با موضوع Focus on Blazorویدئو های رویداد  NET Conf. با موضوع Focus on Blazorویدئو های این رویداد که در youtube و channel9 به همراه زیر نویس انگلیسی (گزینه Caption پایین سمت راست) جمع آوری شده و میتونین استفاده کنین?لینک ویدئو ها در channel9https://channel9.msdn.com/Events/dotnetConf/Focus-on-Blazor?لینک ویدئو ها در youtubehttps://www.youtube.com/playlist?list=PLdo4fOcmZ0oWlP1Qpzg7Dwzxr298ewdUQ? کانال دات نت زومhttps://t.me/DotNetZoom</description>
                <category>محمد جواد ابراهیمی</category>
                <author>محمد جواد ابراهیمی</author>
                <pubDate>Fri, 17 Jan 2020 20:34:18 +0330</pubDate>
            </item>
                    <item>
                <title>آپلود فایل های بسیار حجیم به روش Chunk در ASP.NET Core</title>
                <link>https://virgool.io/dotnetzoom/%D8%A2%D9%BE%D9%84%D9%88%D8%AF-%D9%81%D8%A7%DB%8C%D9%84-%D9%87%D8%A7%DB%8C-%D8%A8%D8%B3%DB%8C%D8%A7%D8%B1-%D8%AD%D8%AC%DB%8C%D9%85-%D8%A8%D9%87-%D8%B1%D9%88%D8%B4-chunk-%D8%AF%D8%B1-aspnet-core-bsesn9kzoxtf</link>
                <description>آپلود فایل های بسیار حجیم به روش Chunk در ASP.NET Coreواسه فایل های نه چندان حجیم (مثلا تا 200 الی 300 مگابایت) میتونین از 2 آموزش زیر استفاده کنین که ترفنداشو بهتون میگهhttp://www.binaryintellect.net/articles/612cf2d1-5b3d-40eb-a5ff-924005955a62.aspxhttps://www.talkingdotnet.com/how-to-increase-file-upload-size-asp-net-core/❇️ ولی اگه فایل هاتون خیلی حجیم هست (مثلا 500 مگ به بالا تاااااا چندین گیگابایت)بهتره از روش Chunk (خرد کردن فایل حجیم به تکه های کوچیک تر و سپس آپلود این تیکه ها و نهایتا جمع کردنش سمت سرور) استفاده کنین.✅ سمپل زیر این قابلیت رو به خوبی پیاده سازی کردهواسه این روش باید هم سمت سرور کدشو بنویسین و هم سمت کلاینت، از پلاگینی استفاده کنین که کار Chunk کردن رو براتون انجام بده (البته دستی هم میشه ولی با پلاگین راحت تره) مثلا این سمپل از پلاگین Resumable.js استفاده کرده.https://github.com/edsoncunha/chunked-file-upload-csharpنکته : واسه اجرا حتما برنامه رو روی Kestrel اجرا کنین وگرنه در حالت IISExpress محدودیت هایی داره.? منبع : کانال دات نت زومhttps://t.me/DotNetZoom</description>
                <category>محمد جواد ابراهیمی</category>
                <author>محمد جواد ابراهیمی</author>
                <pubDate>Wed, 25 Dec 2019 17:16:06 +0330</pubDate>
            </item>
                    <item>
                <title>معرفی MagicOnion : یک فریمورک Realtime مبتنی بر gRPC و MessagePack</title>
                <link>https://virgool.io/dotnetzoom/%D9%85%D8%B9%D8%B1%D9%81%DB%8C-magiconion-%DB%8C%DA%A9-%D9%81%D8%B1%DB%8C%D9%85%D9%88%D8%B1%DA%A9-realtime-%D9%85%D8%A8%D8%AA%D9%86%DB%8C-%D8%A8%D8%B1-grpc-%D9%88-messagepack-u01dpgm1flhx</link>
                <description>معرفی MagicOnion : یک فریمورک Realtime مبتنی بر gRPC و MessagePackاین فریمورک با استفاده از قابلیت HTTP/2 Streaming مبتنی بر  gRPC  و بهره گیری از  MessagePack (یک باینری سریالایز فوق سریع)  برای Serialization (همراه با LZ4 integration) بستری قدرتمند را برای ارتباطات Realtime فراهم می‌کند.?یکی از مزایای این فریمورک عدم نیاز به فایل‌های .proto مخصوص gRPC است چرا که از interface های سی شارپی برای به اشتراک گذاری امضای Endpoint‌های موجود بین Server و Client استفاده میکند.?یکی از دیگر مزایای آن پشتیبانی از Swagger و داشتن Json Gateway توکار متبنی بر HTTP/1 است که به کمک آن می‌توان به صورت Json/RESTful نیز API‌ها را فراخوانی کرد.?همچنین این فریمورک از OpenTelemetry پشتیبانی کرده و می‌توانید از برنامه‌های مانیتورینگ مانند Prometheus و StackDriver و Zipkin و... بر روی پروژه خود استفاده کنید و یا توسط Grafana یک داشبورد مانیتورینگ ویژوال و Realtime ایجاد کنید.?این فریمورک ابزار مناسبی جهت ارتباطات بین Microservice‌ها می‌باشد.?همچنین جایگزین مناسبی برای سرویس‌های API based مانند ASP.NET Core WebAPI و WCF بوده و نیز جایگزین مناسبی برای SignalR و Socket.io جهت ارتباطات Realtime می‌باشد.?ریپازیتوری گیتهابhttps://github.com/Cysharp/MagicOnionاطلاعات بیشترhttps://medium.com/@neuecc/magiconion-unified-realtime-api-engine-for-net-core-and-unity-21e02a57a3ff_______________https://t.me/DotNetZoom</description>
                <category>محمد جواد ابراهیمی</category>
                <author>محمد جواد ابراهیمی</author>
                <pubDate>Thu, 19 Dec 2019 18:29:19 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش API نویسی اصولی و حرفه ای در ASP.NET Core</title>
                <link>https://virgool.io/dotnetzoom/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-api-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A7%D8%B5%D9%88%D9%84%DB%8C-%D9%88-%D8%AD%D8%B1%D9%81%D9%87-%D8%A7%DB%8C-%D8%AF%D8%B1-aspnet-core-exwyjqrlfzok</link>
                <description>آموزش API نویسی اصولی و حرفه ای در ASP.NET Coreچندی پیش بنا به درخواست دوستان یه دوره API نویسی اصولی و حرفه ای در ASP.NET Core رو برگذار کردم که استقبال خیلی خوبی مواجه شد.من سورس این دوره رو توی گتیهاب به صورت Public به رایگان در اختیار عموم گذاشتم تا دوستان بتونن با بررسی سورس کدش، از تکنیک های استفاده شده و کد ها، استفاده کنندر این دوره همه نکات مهم و پرکاربرد در API نویسی اصولی و حرفه ای در ASP Core بررسی شده اند.همچنین سعی شده بهترین و محبوب ترین تکنولوژی ها، کتابخانه ها و ابزار ها داخل پروژه استفاده بشه. ونیز Best Practice های پرفرمنسی و امنیتی بعلاوه تکنیک های پرکاربرد را بررسی و در قالب یک معماری حرفه ای و اصولی استفاده می کنیم.تکنولوژی، ابزار ها و قابلیت های استفاده شده :✅ احراز هویت با JWT و افزایش امنیت آن بوسیله رمزنگاری توکن (JWE)✅ استاندارد سازی و یک دست سازی خروجی API ها✅ اعتبار سنجی خودکار✅ استفاده از Elmah، NLog برای لاگ خطا های سیستم✅ لاگ خطا ها در Sentry.io (یک سیستم مدیریت لاگ) مخصوص اپلکیشن های Enterprise✅ استفاده از Autofac محبوب ترین کتابخانه Ioc Container به همراه ثبت خودکار سرویس ها✅ استفاده از کتابخانه محبوب AutoMapper به همراه یک معماری حرفه ای جهت Mapping خودکار✅ بررسی اصول معماری پروژه و استفاده ترفند های از Reflection جهت فریمورک نویسی✅ بررسی و استفاده از Claim ها تولید خودکار آنها توسط ClaimsFactory + ترفند امنیتی Security Stamp✅ استفاده از چندین ترفند روی EF Core توسط Reflection جهت کدنویسی کمتر و راحت تر✅ لایه بندی اصولی پروژه از صفر به همراه بررسی مباحث Repository و UOW✅ استفاده از Versioning و مدیریت نسخه های پروژه توسط یک معماری حرفه ای✅ استفاده از ابزار Swagger جهت ساخت یک ظاهر شکیل به همراه داکیومنت Aciton ها و Controller های پروژه و امکان تست API ها ✅ یکپارچه سازی Swagger با سیستم احراز هویت JWT و OAuth✅ یکپارچه سازی Swagger با سیستم Versioning✅ اعمال Best Practices ها جهت بهینه سازی، افزایش پرفرمنس و کدنویسی تمیز و اصولی?سورس کامل و نهایی پروژه این دوره به همراه توضیحات بیشتر در گیتهاب در دسترس عموم قرار دادhttps://github.com/dotnetzoom/AspNetCore-WebApi-Course⭐️در پایان اگه واقعا از دوره خوشتون اومده بود حتما به ریپازیتوری گیتهاب اش Star بدین . به نظر من همونطور که اعتراض به یک کار بد یا بی کیفیت حق هممون هست، حمایت (چه مادی و چه معنوی) از یک کار خوب و با کیفیت هم وظیفه هممنون هست و کمک میکنه به بهتر شدن وضعیت جامعمون و اینکه با این کار میتونیم مرز میان خوبی و بدی رو هر چه شفاف تر کنیم ✌️❇️توجه:برنچ master این مخزن همواره به آخرین نسخه ASP.NET Core (به همراه تمام Dependency هایش) بروز رسانی شده و خواهد شد (در حال حاضر ASP.NET Core 5.0 می باشد)جهت دسترسی به کد اولیه پروژه که با ASP.NET Core 2.1 در هنگام تهیه دوره نوشته بود به این برنچ مراجعه کنیدجهت دسترسی به کد پروژه در ورژن ASP.NET Core 3.1 به این برنچ مراجعه کنیدهمچنین جهت اطلاعات بیشتر از تغییرات که به هنگام Upgrade پروژه از نسخه 2.1 به 3.1 انجام شد، میتونین به قسمت ChangeLog مراجعه کنید✅مقاله های بیشتر در دات نت زومhttps://t.me/DotNetZoom</description>
                <category>محمد جواد ابراهیمی</category>
                <author>محمد جواد ابراهیمی</author>
                <pubDate>Thu, 01 Aug 2019 20:34:49 +0430</pubDate>
            </item>
            </channel>
</rss>