<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های سعید صالحی</title>
        <link>https://virgool.io/feed/@1saeedsalehi</link>
        <description>یک احتمالا گیک ، یاد میگیرم ، یاد میدم ، چند ساله کد مینویسم و اهل چالش و این صحبتا</description>
        <language>fa</language>
        <pubDate>2026-06-18 11:21:15</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/1625/avatar/qtwzMj.jpeg?height=120&amp;width=120</url>
            <title>سعید صالحی</title>
            <link>https://virgool.io/@1saeedsalehi</link>
        </image>

                    <item>
                <title>شروع کار با Dapr</title>
                <link>https://virgool.io/@1saeedsalehi/%D8%B4%D8%B1%D9%88%D8%B9-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-dapr-wldv732vrxd5</link>
                <description>آشنایی با Daprاگه شما هم درگیر توسعه اپلیکیشن ها با معماری مایکروسرویس باشید این روز ها خیلی اسم Dapr رو بشنویداگه بخوایم خیلی ساده به این قضیه نگاه کنیم Dapr سعی کرده توسعه اپلیکیشن های مایکروسرویسی رو خیلی راحت تر کنهو این کار رو با تمرکز روی منطق اصلی برنامه و ساده نگه داشتن کد و دور کردن کد از مسائل زیر ساختی هست در واقع Dapr همونجور که خودش رو معرفی میکنه یه runtime هست برای اجرای برنامه هااولین ریلیز این محصول هیجان انگیز 17 فوریه 2021 بوده و اماده استفاده توی پروداکشن هست https://blog.dapr.io/posts/2021/02/17/announcing-dapr-v1.0/ پیشنیاز هانصب Dapr Cliنصب .Net 5 SDKشروعبرای یک پروژه ساده Asp.net Core ایجاد میکنیمmkdir WeatherForecastService
cd WeatherForecastService
dotnet new webapi
dotnet runهمون جوری که خودتون بهتر میدونید این یه پروژه ساده asp .net core درست میکنهمعمولا به صورت پیشفرض توی تملیت این پروژه یه کنترلر پیشفرضی وجود داره که دیتای آب و هوا رو مثلا قراره برگردونهاجرای Api با استفاده از DaprDapr از الگوی sidecar داره استفاده میکنهdapr میتونه api ما رو اجرا کنه و Api ما رو به از طریق dapr به بیرون expose کنهدستور زیر رو روی مسیر جاری پروژه تون اجرا کنیدdapr run --app-id weatherforecastservice --dapr-http-port 3500 --app-port 5001 --app-ssl -- dotnet runبیاین بخش های مختلف این دستور رو با هم دیگه مرور کنیم- -app-id یه شناسه برای اپلیکیشن/سرویس تون که بشه با این شناسه پیداش کرد- –dapr-http-port پورتی که sidecar dapr به اون گوش میکنه- –app-port پورتی که اپلیکیشن/سرویس ما روی اون گوش میکنه- –app-ssl مشخص میکنه که درخواست هایی که سرویس میده ssl باشه یا نه– dotnet run روشی که باهاش پروژه رو اجرا میکنیدمزایای استفاده از Daprقبل از این که پروژه رو روی Dapr اجرا کنید میتونید با ادرس https://localhost:5001/weatherforecast اما وقتی با استفاده از dapr پروژه رو اجرا میکنید علاوه بر روش بالامیتونید متد مورد نظرتون رو با استفاده از فراخوانی اون از طریق sidecar اجرا کنید http://localhost:3500/v1.0/invoke/weatherforecastservice/method/weatherforecastشاید تو نگاه اول این خیلی ساده به نظر برسهاما نکته خیلی مهم درباره این روش اینه اهمیتی نداره سرویسی که پشت dapr داره اجرا میشه روی چه بستری هست به طور مثال اگه روی gRPC هم باشه ما میتونیم اونو خیلی راحت با استفاده از Api هایی که Dapr به ما میده میتونیم فراخوانی کنیمدر واقع یه روش استانداردی برای فراخوانی متد ها بین سرویس های مختلف میشه داشته باشیم که به صورت زیرهhttp://localhost:&lt;dapr-http-port&gt;/v1.0/invoke/&lt;app-id&gt;/method/&lt;method-name&gt;نکته مهم اینه که این روش فارغ از زبان و تکنولوژی هست و شما به همین روش میتونید به صورت مستقیم با استفاده از این Api یک سرویس که با زبان دیگه ای توسعه داده شده رو فراخوانی کنید ولی این همه ماجرا نیستبا استفاده از این روش استاندارد برای فراخوانی سرویس ها ما میتونیم به چیز های بزرگتری توی توسعه اپلیکیشن های مایکروسرویسی برسیم خیلی از این ها به صورت توکار توی Dapr پیاده شدنService discoveryDistributed tracingMetricsError handlingEncryptionو نکته خیلی جالب درباره Dapr اینه که شما نیاز نیست وقتی دارین کد مینویسین درباره همه این مسائل فک کنید و به جاش میتونید تمرکزتون رو بزارین رو معماری درست و پیاده سازی درست و با کیفیت منطق برنامهلایبرری هایی برای راحت تر کردن استفاده از امکانات dapr وجود داره که با یه جستجوی ساده توی nuget میتونید اونا رو پیدا کنیدخلاصهتوی این متن به صورت خیلی خلاصه با Dapr آشنا شدیم میتونید روی لینک dapr.io اطلاعات بیشتری پیدا کنیداحتمالا در آینده چیز های بیشتری از این محصول جذاب مینویسمممنون میشم شما هم اگه نظری داشتین با من به اشتراک بزارید</description>
                <category>سعید صالحی</category>
                <author>سعید صالحی</author>
                <pubDate>Wed, 05 May 2021 14:33:42 +0430</pubDate>
            </item>
                    <item>
                <title>تغییر ناپذیری Immutable در #C</title>
                <link>https://virgool.io/@1saeedsalehi/immutablity-in-c-nfhiwxt4xdm6</link>
                <description>احتمالا شما هم اصطلاح Immutable به گوشتون خورده و براتون سوال بوده که این به چه معنیه؟معمولا همه تو توضیح این قضیه از کلاس string یاد میکنن و اون رو با StringBuilder مقایسه میکنن و در باب مزایا و معایب هر کدوم از اون ها صحبت میکننایده من اینه که تو ساده ترین حالت این قضیه رو توضیح بدمتغییر ناپذیری ، یعنی به محض این که کار وهله سازی (Constructor) یک شی (Object) به اتمام رسید ، نتوانیم آن را تغییر دهیم.این مورد در جایی که آبجکت ها توسط ارجاع  (by reference)پاس داده می شوند بسیار کاربردی است ، چرا که می توانیم اطمینان داشته باشیم شی مورد نظر در جای دیگری از کد تغییر نخواهد کرد.یکی از اصلی ترین کاربرد های این مساله در مسائل همزمانی (Concurrency) است. چرا که نیاز به lock کردن نخواهیم داشت ، چون state شی تغییر نخواهد کرد.استفاده از این مفهوم در کد میتواند به ذات جلوی مشکلات زیادی را بگیرد. این مفهوم یکی از مفاهیم اصلی در برنامه نویسی تابعی (Functional Programming) است. من در مورد کاربرد این مفهوم و مثال های عملی از Immutable Type ها در اینجا بیشتر نوشته امhttp://1saeedsalehi.ir/programming/2019/11/30/functional-programming-2-examples.html</description>
                <category>سعید صالحی</category>
                <author>سعید صالحی</author>
                <pubDate>Thu, 19 Mar 2020 02:29:34 +0330</pubDate>
            </item>
                    <item>
                <title>قسمت اول برنامه نویسی تابعی - آشنایی</title>
                <link>https://virgool.io/@1saeedsalehi/introduction-to-functional-programming-teg5yxf4whtq</link>
                <description>هیچ شکی نیست که بزرگترین چالش در توسعه نرم افزار‌های بزرگ، پیچیدگی آن است. تغییرات همیش اجتناب ناپذیر هستند. به خصوص زمانی که صحبت از پیاده سازی امکان جدیدی باشد، پیچیدگی اضافه خواهد شد. در نتیجه منجر به سخت شدن فهمیدن کد می‌شود، زمان توسعه را بالاتر می‌برد و باگ‌های ناخواسته را به وجود خواهد آورد. همچنین تغییر هر چیزی در دنیای نرم افزار بدون به وجود آوردن رفتار‌های ناخواسته و یا اثرات جانبی، تقریبا غیر ممکن است. در نهایت همه این موارد می‌توانند سرعت توسعه را پایین برده و حتی باعث شکست پروژه‌های نرم افزاری شوند. سبک‌های کد نویسی دستوری (Imperative) مانند برنامه نویسی شیء گرا، میتوانند به کاهش این پیچیدگی‌ها تا حد خوبی کمک کنند. البته در صورتیکه به طور صحیحی پیاده شوند. در واقع با ایجاد Abstraction در این مدل برنامه نویسی، پیچیدگی‌ها را مخفی میکنیم.اگه آشنایی با مفاهیم برنامه نویسی تابعی  براتون جذابیت داره ، پست کاملی در این رابطه در وبلاگ خودم منتشر کردم که می تونید اونو اینجا پیدا کنید http://1saeedsalehi.ir/programming/2019/11/25/functional-programming.html</description>
                <category>سعید صالحی</category>
                <author>سعید صالحی</author>
                <pubDate>Wed, 18 Mar 2020 03:12:20 +0330</pubDate>
            </item>
            </channel>
</rss>