Software Philosophy – Telegram
Software Philosophy
3.45K subscribers
160 photos
41 videos
1.54K links
چکیده‌ای از مفاهیم به روز مهندسی نرم افزار برای مهندسین نرم‌افزار.
معماری نوین نرم‌افزار، تکنولوژی‌های برنامه نویسی جدید
Download Telegram
Forwarded from فلسفه دیزاین
کتاب تست مامان: نحوه‌ی درست یادگیری از مشتری

کتابی که در این مطلب می‌خواهیم معرفی کنیم، کتاب هنر یادگرفتن از مشتری است، چیزی که ما در نهایت به عنوان محصول تولید می‌کنیم باید پاسخ‌گوی نیاز مشتری باشد و هیچ‌چیزی دردناک‌تر از شکست یک محصول نیست. ابزار ما سوال‌ها و اهدافی هست که باید به درستی از کاربر پرسیده شود تا هر پاسخی که دریافت می‌کنیم سازنده و کارآمد برای محصول ما باشد.

یادگرفتن از مشتری مثل کندوکاو باستان‌شناسان برای پیدا کردن زیرخاکی‌هاست. همه چیز اون پایینه ولی خیلی حساس و شکننده. با هر بیلی که به زمین می‌زنیم به حقیقت نزدیک می‌شویم ولی کافیه کندوکاو ناکارآمد باشه تا گنجی که اون زیر هست، تکه تکه شه.

برای پیداکردن جواب درست باید سوال ما درست باشه. ابزار ما سوالات و اهدافمون هستن. اما باید خوب یادشون بگیریم. کار راحتی نیست اما اگر به گنج اون پایین فکر کنیم اون موقع به ارزش این مهارت پی می‌بریم.

اما چیزهایی که از این کتاب یاد گرفتم:

- هر ایده‌ای که دارین نه تنها از مادرتون بلکه از هیچ‌کس دیگر درباره‌ی خوب‌بودن آن نپرسید.
- در همان ابتدا ایده‌ی خودتون رو تعریف نکنید.
- درباره‌ی زندگی و عادات مشتری سوال بپرسید نه درباره‌ی ایده‌ی خودتون.
- درباره گذشته و رفتار مشتری‌ها بپرسید نه درباره‌ی آینده، هرچیزی که به آینده مربوط هست یک دروغ خوشبینانه‌ست.

پیشنهاد می‌کنم در ادامه، مقاله‌ای که خلاصه‌ای از برداشت‌های فصول مختلف کتاب هست، مطالعه کنید یا خود کتاب را تهیه کنید و از خواندن آن لذت ببرید. 🙂

https://bit.ly/dxgn640

(زمان حدودی مطالعه: ۶ دقیقه)

نویسنده: محمدرضا وفائی

#طراحی‌محصول #معرفی‌کتاب #مدیریت‌محصول
@Dexign فلسفه دیزاین

_____
Forwarded from Iran Agile
👈 الویت بندی بک‌لاگ محصول با یک سوال ساده

اولویت بندی برای مدیران محصول یک چالش همیشگی است، بک‌لاگ محصول هرگز پایان نمی‌یابد. اگر مدیر محصول باشید، یاد گرفته اید که گفتن "نه" همیشه آسان نیست.

به جای گفتن "نه" ، یک سوال ساده وجود دارد که می تواند به شما کمک کند: " انجام این چگونه از اهداف کسب و کار ما پشتیبانی می کند؟"

اما چگونه باید این کار را در واقعیت انجام داد؟
👇👇👇

https://brainmates.com.au/brainrants/prioritise-your-product-backlog-with-one-simple-question/

@iranagile
Forwarded from DotNetZoom (Ali)
این Mock یا Mocking چیه؟!!
#سوال_درخواستی

🔸 در واقع Mock کردن (Mocking) یک تکنیک تست نویسی است که در آن قسمتی از کد را با یک پیاده سازی دلخواه جایگزین میکنیم و از آن برای شبیه سازی یک عملیات واقعی استفاده میشه.

🔹 معمولا ماک کردن زمانی استفاده میشه که یک متد یا کلاس، وابستگی یا وابستگی هایی داره که توی تستمون تداخل ایجاد میکنه.

🔸 مثلا فرض کنید یک سرویسی رو میخواین تست کنین که داخلش از سرویس SmsSender استفاده شده (یعنی به سرویس SmsSender وابستگی داره)، درنتیجه هربار که اون تست رو انجام میدید یه SMS هم ارسال میکنه که خب لازم نیست
در این صورت میایم و سرویس SmsSender رو ماک میکنیم که دیگه Sms ارسال نکنه ولی true رو برگردونه (به این معنی که درست کار کرده)

🔹 این باعث میشه ما بتونیم عملکرد (functionality) همون متد رو تست کنیم به جای اینکه تست مون را درگیر و وابسته به عوامل ثالث (مثل ارسال SMS) کنیم

🔰حالا چه وقتایی معمولا ماک استفاده میشه؟

1️⃣ وابستگی ما در دسترس نباشه
مثلا سرویس شما قراره یه اطلاعاتی رو از وب سرویس بخونه، خب اگه اینترنت قط باشه، تا بالاترن سطح سرویس هامون که به این وابسته بوده fail میشه، پس میایم ماک اش میکنیم و میگیم با فرض اینکه وب سرویس در دسترسه و داره درست اطلاعات رو بر میگردونه، حالا برو ببینم خودت چند مرده حلاجی؟!

2️⃣ وابستگی ما کند باشه
مثلا یه تست برای انجام شدنش نیاز به یه کوئری به دیتابیس داره که 60 ثانیه زمان میبره، پس میایم و ادامه ماجرا ...

3️⃣ وابستگی ما باید توی تست رفتارش عوض بشه
مثل همین مثال سرویس SmsSender

4️⃣ و چندین سناریو دیگه ...

🔰 بهترین کتابخانه های Mocking در دات نت این ها هستند
1️⃣ Moq
2️⃣ NSubstitute
3️⃣ FakeItEasy

🔰حالا یه سوالی که پیش میاد اینه که این کتابخانه های Mocking چطوری کار میکنن؟!
اساس کار این ابزار ها به 2 صورت هست

1️⃣ بر اساس interface :
که عملا توی runtime، یک کلاس الکی درست میکنن که از interface شما ارث بری کرده و بهتون اجازه میده که پیاده سازی متد هاش رو تغییر بدین

2️⃣ بر اساس virtual :
در این روش متد هایی که میخواین قابل mock شدن باشن باید virtual تعریف بشن، در این صورت میاد و توی runtime یک کلاس ایجاد میکنه که از کلاس مورد نظر شما ارث بری کرده ولی متد های virtual اش رو override (بازنویسی) کرده و بهتون اجازه میده که پیاده سازی متد هاش رو تغییر بدین

_____________
@DotNetZoom
Forwarded from فلسفه دیزاین
دیزاین اسپرینت: روشی برای حل مساله

ما در استودیو دیزاین نیاز به یک راهکار سریع و خوب برای ایده‌پردازی روشمند در جهت حل مسائل طراحی محصول را کاملا حس کردیم و پس از آزمودن روش‌های مختلف و بعضا ابتکاری خودمان، بر آن شدیم که از دیزاین اسپرینت در برخی پروژه‌ها بهره ببریم.
دیزاین اسپرینت روشی‌ست که ساخت محصول اولیه، تست و استخراج ایرادات آن را با سرعت بالا امکانپذیر می‌کند. این روش یک فرآیند پنج روزه برای پاسخ‌دهی به سوالات حساس بیزینس از طریق دیزاین، پروتوتایپ کردن و تست ایده‌ها با مشتری است.

در مقاله امروز به توضیح این روش و بررسی نکات کلیدی آن پرداخته‌ایم. این مقاله برپایه کتاب The Design sprint نوشته شده است.

https://bit.ly/dxgn641

(زمان حدودی مطالعه: ۱۳ دقیقه)

نویسنده: فرشید ایپکچی

#طراحی_محصول #دیزاین_اسپرینت

@Dexign فلسفه دیزاین

_____
Forwarded from Iran Agile
🔗 12 روش برای ایجاد روحیه تیمی از راه دور در طولانی مدت و نه به عنوان یک فعالیت کوتاه مدت

اکنون، بیش از هر زمان دیگری، این سوال وجود دارد که "چگونه روحیه تیمی را از راه دور ایجاد کنیم؟"

از زبان بدن تیم خود در تماس های زوم یا اسکایپ یا ...، می توانید تشخیص دهید. افراد به نظر بی روحیه می رسند، سطح انرژی پایین است.

شما در این احساس تنها نیستید. سی و نه درصد از مدیران در کارگاه اخیر KYT Live! جلسه با صدها مدیر از سراسر جهان ، سطح فعلی روحیه در تیم آنها را "پایین" توصیف کرد (از 140 شرکت کننده در نظرسنجی).

در میان همه گیری ها و انتخابات ایالات متحده و همه که اکنون از راه دور کار می کنند ، یک طوفان ترس ، اضطراب و کسالت به بسیاری از تیم ها راه یافته است.

به عنوان یک رهبر، احساس فشار می کنید: البته شما می خواهید همه چیز را برگردانید. برای اینکه روحیه تیم خود را بالا ببرید و بفهمید چگونه روحیه تیمی را از راه دور ایجاد کنید. اما چگونه این کار را باید انجام داد؟

👇👇👇

https://knowyourteam.com/blog/2020/10/29/how-to-build-team-morale-remotely/

@iranagile
Forwarded from DotNetZoom (Ali)
مقایسه پرفرمنس gRPC و REST

طبق این بنچمارک میتونین ببینین که توی درخواست های سبک ( مثل یه GET ساده با دیتای کم حجم) gRPC و REST تفاوتی خاصی با هم ندارن

ولی توی درخواست های سنگین (که حجم دیتای انتقالی زیاد باشه) :

🔸توی حالت GET (دریافت اطلاعات) gRPC بیش از 7 برابر سریع تر از REST عمل میکنه

🔹وتوی حالت POST (ارسال اطلاعات) gRPC بیش از 11 برابر سریع تر از REST عمل میکنه

🔸دلیل اصلی این سرعت بسیار بالا اینه که gRPC از Protocol Buffers برای سریالایز و فشرده سازی اطلاعات استفاده میکنه و نیز به صورت پیشفرض از HTTP/2 و استفاده میکنه که اون هم یه مکانیزم فشرده سازی داره

🔹برای کار با gRPC در حالت عادی باید از CLI مخصوص اون "protoc" برای کامپایل و تولید کلاس های سرویس از روی فایل های "proto." استفاده کنید. ولی با Visual Studio میتونین همین کار رو کامپایلر built-in اش راحت تر انجام بدین

🔸جمع بندی اینکه gRPC میتونه گزینه بسیار خوبی برای ارتباطات بیین Micro-service ها باشه

لینک مقاله و ریپازیتوری گیتهاب این بنچمارک
Evaluating Performance of REST vs. gRPC
Github Repository
________________
@DotNetZoom
Forwarded from فلسفه دیزاین
مرتب‌سازی کارت یا Card Sorting – روشی برای معماری اطلاعات بهتر

مرتب‌سازی کارت روشی برای تحقیق در حوزه‌ی تجربه‌ی کاربری است که کاربران موضوعات را به صورت گروهی دسته‌بندی می‌کنند. بخشی از ساخت یک وب‌سایت کارآمد، سازماندهی اطلاعات به گونه‌ای است که افراد آنچه را که می‌خواهند به راحتی پیدا کنند. اغلب اوقات، محتوا بر اساس آنچه برای شرکت‌ها و استارتاپ‌ها معنی دارد نه برای کاربران ساخته می‌شود. یکی از راه‌های اصلی برای فهمیدن این که یک سرویس با مدل ذهنی کاربران مطابقت دارد، از طریق مرتب‌سازی کارت است.

در این مقاله، با مفهوم و جزییات مرتب‌سازی کارت بیشتر آشنا شوید.

https://bit.ly/dxgn647

(زمان مورد نیاز برای مطالعه: ۱۲ دقیقه)

نویسنده: محمدرضا وفائی

#مرتب‌سازی‌کارت #تجربه‌کاربری #تحقیق
@Dexign فلسفه دیزاین

__
Forwarded from Iran Agile
👈 هشت روش متفاوت تخمین زدن برای تیم‌های چابک

T-Shirt Sizing 👕

Sprint Poker 🃏

Three Point Method 🔺

Affinity Estimation 📊

Relative Mass Evaluation ⚖️

Dot Voting 🟢

Maximum Allowable Size

Big, Uncertain, Small 🎰

https://www.parabol.co/blog/agile-estimation-techniques

@iranagile
Forwarded from DotNetZoom (Ali)
❇️ آموزش عیب یابی و رفع مشکلات Performance ایی برنامه های ASP.NET Core (زبان اصلی زیر نویس دار)

از
پایین ویدئو گزینه [Subnoscript/captions] میتوانید زیرنویس آن را فعال کنید

[04:10] - Introducing the demo
[06:03] - Performance Diagnostic tools
[08:37] - Collecting performance data with PerfCollect
[16:24] - Inspecting performance data with PerfView
[25:30] - Common ASP.NET Core Performance Issue
[28:49] - ASP.NET Core Performance Best Practices

Useful Links
PerfView
PerfCollect
ASP.NET Core performance best practices

____________
@DotNetZoom
👍1
Forwarded from فلسفه دیزاین
قانون پارکینسون یا اصل محدودیت زمانی

«هر کار به اندازه‌ی زمانی که برای آن تخصیص داده شده طول می‌کشد.»

قانون پارکینسون مفهومی رایج در مدیریت است. نام آن از نام تاریخدان انگلیسی سیریل نورث‌کوت پارکینسون گرفته شده که در سال ۱۹۵۵ در مقاله‌ای طنزآمیز در اکونومیست به این قانون اشاره کرده است.

این قانون زمینه‌ی گسترش بی‌رویه بوروکراسی را بیان می‌کند. از دید این قانون هر کار تا زمانی که برای آن تعیین شده طول می‌کشد و این مدت ارتباط چندانی با میزان و ماهیت کار ندارد.
این نحوه عمل در سازمان‌ها رخ می‌دهد و بوروکراسی‌ها بدون گسترش اهدافشان، خود گسترش می‌یابند.

گاهی اوقات دقت کرده‌ایید که هنگام انجام دیزاینی که به دقایق ۹۰ آن رسیده، تازه ایده‌ها به سراغتان می‌آیند و بهره‌وری لازم به اوج خود می‌رسد؟! اما چه فایده که به پایان مهلت آن کار رسیده‌اید و دیگر فرصتی نیست.

اینکه هر قسمت از وظیفه یا کار باید محدودیت زمانی داشته و انتهای آن بسته باشد به این دلیل است که انسان با تعصب‌ها و ناهنجاری‌های شناختی‌ای که دارد در پیش‌بینی و تخمین زدن، بسیار بد عمل می‌کند. به نظر می‌رسد برای انجام کاری چه یک هفته وقت گذاشته شود و چه یک روز، ما آن را تا نزدیک موعد مقرر آن انجام نمی‌دهیم. پس بهتر نیست که زمان مناسب و لازم را برای آن در نظر بگیریم؟

البته این بدان معنی نیست که شما به عنوان مثال یک اپلیکیشن بزرگ را در یک روز به صورت کامل ببندید که نتیجه جز فاجعه چیزی نخواهد بود.
باید یک تعادل مناسب بین حجم کاری که در حال انجام آن هستیم و زمان مورد نیاز آن ایجاد کنیم و چه بهتر که این زمان به اندازه‌های کوچک‌تر تقسیم شوند تا به کلیات نتایجی که نیاز داریم سریع‌تر برسیم و درصورت شکست، لااقل زمان زیادی را هدر نداده باشیم.

فکر می‌کنم برای واکاوی بیشتر این موضوع، خواندن مقاله‌ی زیر راهگشا باشد:

https://bit.ly/dxgn648

پ.ن: خوشحال می‌شویم که تجربیات خود را در مورد مدیریت زمان با ما در زیر همین پست در قسمت نظرات به اشتراک بگذارید.

(زمان حدودی مطالعه‌ی مقاله‌‌: ۶ دقیقه)

نویسنده: حسین میرزاده

#تجربه_کاربری #قانون_پارکینسون #مدیریت_زمان #محدودیت

@Dexign فلسفه دیزاین

__
Forwarded from Iran Agile
"ما ساختمانهایمان را شکل می دهیم، پس از آن ساختمانها ما را شکل می‌دهند." چرچیل.

بله، این افراد هستند که سازمان‌ها، فرایندها و فرهنگ را شکل می‌دهند. اما همین افراد به همان اندازه که کنترل کننده آن تصمیمات هستند، اسیر آن تصمیمات و سیستمهای خود ساخته نیز هستند.

بسیاری از اوقات شاید بگوییم که فلان فرآیند یا سیستم و ... مشکل دارد، ولی در حقیقت این مشکل افراد هست نه فرآیند یا ابزار. شاید فکر کنیم تغییر آن موارد به معنای تغییر سیستم است، در حالی که این تغییر باید توسط افراد ایجاد شود.

افراد سیستم را می‌سازند، ولی خود افراد دوباره اسیر سیستم می‌شوند و سیستم تصمیم‌های آینده را شکل می‌دهد؟

در اینجا بین انجمن چابک، دوگانگی بزرگی وجود دارد، یک دسته فکر می‌کنند که افراد در مرکز چابکی هستند ولی دسته دوم فکر می‌کنند سیستم در مرکز هست زیرا این سیستم است که به افراد و روابط شکل می‌دهد.

مربی ها، افراد را در مرکز امور قرار می‌دهند ولی مشاورها تمرکز روی سیستم دارند.

اما واقعاً کدام در مرکز توجه باید باشد؟
👇👇👇👇

https://www.allankellyassociates.co.uk/archives/4834/the-people-problem-problem-and-the-great-agile-divide/


@iranagile
Forwarded from کدهک
آموزش RabbitMQ و پیاده سازی الگوی Messaging

در این ویدیو به معرفی RabbitMQ می پردازیم و نحوه استفاده از آن را در NET Core. بررسی می کنیم. از RabbitMQ به عنوان Message Broker استفاده میشود که میتواند پیامها را درون صف نگه دارد و به ترتیب در اختیار سایر سرویس ها قرار دهد. این ابزار در پیاده سازی Distributed System ها و میکروسرویس ها کاربرد زیادی دارد.

https://codehaks.com/go/fpw
Forwarded from DotNetZoom (محمد جواد ابراهیمی)
قابلیت Decompile کد های #C در Visual Studio

قبلا در مورد اضافه شدن قابلیت Decompile کد های سی شارپ در VSCode توسط ILSpy گفته بودیم

این قابلیت برای Visual Studio هم وجود داره اما در حالت پیش نمایش هست و به صورت پیشفرض فعال نیست

جهت فعال سازی این قابلیت باید از منو Tools گزینه Options را انتخاب کرده و از قسمت Text Editor > C# > Advanced گزینه Enable navigation to decompiled sources رو تیک بزنین

بعد از فعال سازی روی کلاس/متدی که سورسش رو ندارین راست کلید و گزینه "Go to Definition" رو انتخاب کنین براتون Decompile کنه و کدشو نشونتون بده

این امکان هم توسط کتابخانه معروف ILSpy انجام شده و بار اولی که ازش استفاده کنین یه سوال (در مورد قبول License کتابخونه ILSpy) میپرسه که گزینه Yes رو باید بزنین

جهت استفاده از این قابلیت باید حداقل ویژوال استادیو 2019 نسخه 16.5 به بالا نصب داشته باشین (از منوی Help گزینه Check for Update میتونین چک کنین)
جهت مطالعه بیشتر اینجا و اینجا
______________
@DotNetZoom
اولین #گپ_تکنیکال «فلسفه نرم‌افزار»
با موضوع «Open Source and Community Driven Activity»

همونطور که می‌دونین تلگرام امکان Voice Chat رو اخیرا به کانال‌ها اضافه کرده، امکانی که تجربه خیلی جالبی رو به تلگرام اضافه کرده که خیلی مشابه Clubhouse هست و باعث می‌شه بتونیم گپ‌های باحالی با هم بزنیم. انگار رفتیم و تو یه کافه نشستیم و با هم گپ تکنیکال می‌زنیم.

ما هم تصمیم گرفتیم اولین گپ تکنیکال رو از طریق همین ابزار برگزار کنیم.
تو این دورهمی #مهران_داودی، #یاسر_مرادی و #محمد_جواد_ابراهیمی هم صحبت خواهند کرد.

امروز، یکشنبه، ۸ فروردین، ساعت ۲۰:۰۰ منتظرتون هستیم. حتما تلگرامتون رو آپدیت کنین و برای اینکه اون تایم یادتون نره می‌تونین کانال (@SoftwarePhilosophy) رو تو تلگرامتون پین کنین موقع شروع متوجه بشید.

@SoftwarePhilosophy
Live stream started
Live stream finished (1 hour)
Talk 01
Software Philosophy
اولین #گپ_تکنیکال «فلسفه نرم‌افزار»
با موضوع «Open Source and Community Driven Activity»
سی شارپ ۹

قبلا راجع به ویژگی های سی شارپ ۹ صحبت کردیم و به مرور در آینده موارد دیگه‌ای رو هم بررسی می‌کنیم

برای شروع باید NET 5. و آخرین ویژوال استودیو را داشته باشید. (با نصب آخرین ورژن ویژوال استودیو NET 5. هم نصب می‌شه)

ویژگی Target Typing :

در اینجا شما می‌توانید هنگام Initilize کردن کلاس خود، نام آن را نیاورید ولی حتما باید نوع متغییر خود را مشخص کنید و نباید قبل از آن var گذاشته شود.
Person person = new();

اگر کلاس شما سازنده‌ای دارد که در ورودی آن مقداری می‌گیرد می‌توانید داخل پرانتز های new اون مقدار را وارد کنید:

Person person = new("John");

تا حالا اکثر اوقات اینگونه می‌نوشتیم 👇👇
var person = new Person
{
FirstName = "John"
};

الان احتمالا می‌خواهیم به این شکل تغییرش دهیم 👇👇
Person person = new
{
FirstName = "John"
};

ولی این خطای کامپایل می‌دهد. چرا؟
چون در این حالت یک anonymous object می‌سازد در حالی که ما فکر می‌کنیم Person می‌سازد.
برای رفع این مشکل باید دو تا پرانتز جلوی new بگذاریم

Person person = new()
{
FirstName = "test"
};

احتمالا با عملگر ?? آشنا هستید. این عملگر می‌گوید اگه سمت چپم نال بود مقدار سمت راستم را بردار ولی اگه نال نبود مقدار خودش را در نظر بگیر

interface IAnimal{}

class Dog : IAnimal{}

class Cat : IAnimal{}

Cat cat = null;
Dog dog = new();
IAnimal animal = cat ?? dog;

این حالت تا قبل سی شارپ ۹ قابل انجام نبود ولی با ویژگی Target Typing این cat و dog از یک نوع به حساب می‌آیند.


قبل از سی شارپ ۹

public ObservableCollection<Person> Person{ get; } = new ObservableCollection<Person>();
بعد از سی شارپ ۹

public ObservableCollection<Person> Persons { get; } = new();

🔸 مطالب تکمیلی را می‌توانید اینجا مطالعه کنید:

https://dotnetcoretutorials.com/2020/08/07/improved-target-typing-in-c-9/

https://www.thomasclaudiushuber.com/2020/09/08/c-9-0-target-typed-new-expressions/

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.

#حامد_حاجیلو (http://bit.ly/2IVjfYD)

کانال تلگرام:
@SoftwarePhilosophy
________
Forwarded from فلسفه دیزاین
۵ اصل برای تعامل بهتر بین طراح و توسعه‌دهنده

مسیری که در ابتدا دیده‌ایم، این بود که طراح، طرح خود را با استفاده از ابزار طراحی می‌کرد و سپس فایل‌های سورس و رندرشده را روی هارد ذخیره می‌کرد و سپس این فایل‌ها به توسعه‌دهنده تحویل داده می‌شد تا به صورت دستی، ارقام و متغیرهای مورد استفاده از آن‌ها را استخراج و در کدهای خود استفاده کند.

در طی این‌ سال‌ها، روش‌های تعامل طراح با توسعه‌دهنده بارها تغییر یافته! برخی روش‌ها بهتر از سایرین کار کرده‌اند. در بسیاری از موارد، روش‌هایی که در یک پروژه بصورت عالی جواب داده بودند در پروژ‌های بعدی بصورت فاجعه‌آمیزی شکست خورده و به طور کلی کنار گذاشته شده‌اند.

بنابراین در این مقاله تعدادی از اصول را بیان می‌کنیم که بر خلاف روش‌هایی که در این سال‌ها تغییرات زیادی داشته‌اند از ماندگاری بیشتری برخوردارند. از طرفی دیگر، می‌توان روش‌هایی را بر پایه‌ی این اصول برای هر تیم فارغ از هر نوع و اندازه ابداع کرد.

https://bit.ly/dxgn651

(زمان حدودی مطالعه: ۸ دقیقه)

نویسنده: محمدرضا وفائی

#اصول‌تعامل #طراح #توسعه‌دهنده #تیم‌دیزاین

@Dexign فلسفه دیزاین

_____
معرفی System.Threading.Channels

فرض
کنید سیستم ایمیل مارکتینگ شما قرار است یک میلیون کاربر را در حافظه لود کند و سپس برای همه‌ی آن‌ها ایمیل ارسال کند. از زمانی که شما این کاربرها را از دیتابیس لود می‌کنید هزینه بالایی بابت کوئری سنگین متحمل می‌شوید و همچنین بعد از لود کردن هم نگهداری این تعداد در حافظه باعث اشغال شدن مقدار زیادی از حافظه می‌شود. (هر چند عملیات با موفقیت انجام می‌شود ولی بهینه نیست!)
از طرفی هم اگر بخواهید مثلا هزار تا هزار تا این داده ها را لود و ارسال کنید، سرعت عملیات پایین می‌آید.

بهینه ترین روش ایجاد سیستمی است که همانند چرخه تولید به مصرف عمل کند. یعنی مصرف کننده داده صرفا داده‌هایی را از یک صف تعریف شده می‌گیرد و قسمت تولید کننده داده هم با استراتژی خاصی داده‌ها را تولید (از دیتابیس لود می‌کند) و داخل صف قرار می‌دهد و هر موقع کارش به اتمام رسید به مصرف کننده اعلام می‌کند تا دیگر منتظر صف نماند.

در اینجا چالش‌های زیادی مطرح می‌شود که در System.Threading.Channels این چالش‌ها مد نظر قرار گرفته شده است که برنامه نویس می‌تواند بر روی چنل (صف) داده قرار دهد (Write) و یا در جای دیگری از داده‌های صف استفاده کند (Read).

افزودن داده بر روی چنل
await channel.Writer.WriteAsync(item);

خواندن داده از چنل
channel.Reader.ReadAllAsync()

توضیحات تکمیلی را اینجا بخوانید:

https://virgool.io/@hamedhajiloo96/system-threading-channels-z1kx0mctp7gp

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.

#حامد_حاجیلو (http://bit.ly/2IVjfYD)

کانال تلگرام:
@SoftwarePhilosophy

________
دومین #گپ_تکنیکال «فلسفه نرم‌افزار»
با موضوع: «Software Architecture: Maintainablity, Reusablity»

همونطور که می‌دونین تلگرام امکان Voice Chat رو اخیرا به کانال‌ها اضافه کرده، امکانی که تجربه خیلی جالبی رو به تلگرام اضافه کرده که خیلی مشابه Clubhouse هست و باعث می‌شه بتونیم گپ‌های باحالی با هم بزنیم. انگار رفتیم و تو یه کافه نشستیم و با هم گپ تکنیکال می‌زنیم.

ما هم تصمیم گرفتیم به مرور گپ تکنیکال رو از طریق همین ابزار برگزار کنیم.
تو این دورهمی #مهران_داودی، #یاسر_مرادی و #مریم_داودی هم صحبت خواهند کرد.

فردا چهارشنبه، ۲۵ فروردین، ساعت ۲۱:۰۰ منتظرتون هستیم. حتما تلگرامتون رو آپدیت کنین و برای اینکه اون تایم یادتون نره می‌تونین کانال (@SoftwarePhilosophy) رو تو تلگرامتون پین کنین موقع شروع متوجه بشید.

@SoftwarePhilosophy