#OAuth
🌀OAuth authorization
🔹 در این پست می آموزیم که OAuth چیست.
درابتدا باید بدانیم که OAuth مخفف Open Authorization میباشد.
OAuth
🔸 یک پروتکل برای اهدای مجوز برای دسترسی به اطلاعات کاربر توسط اپلیکیشنی دیگر است.
این پروتکل ابتدا در سال 2007 معرفی شد و توسط توییتر استفاده شد و با توجه به استقبال و گستردگی ان در سال 2010 نسخه OAuth 2.0 توسط IEFT (جامعه بین المللی آزاد از طراحان شبکه ، اپراتورها ، فروشندگان و محققانی است که بر روی تدوین استانداردهای فنی برای اینترنت کار می کنند.) معرفی شد.
🔻 برای مثال ممکن است موقع ثبت نام در سایتی گزینه هایی همچون “login with Google” یا “login with Facebook” را دیده باشید که عملیات login را بسیار ساده میکند و با اعطای مجوز دسترسی به اطلاعاتتان به سایتی که میخواهید در آن حساب بسازید عملیات ورود و ساخت حساب را انجام میدهید.
✔️ سه اجزایی که در یک مکانیزم OAuth وجود دارند عبارتند از :
1️⃣ OAuth Provider , Resource Provider
سرویسی که با دریافت تاییدیه امکان استفاده از اطلاعات کاربر را به یک اپلیکیشن دیگر میدهد. مانند گوگل ، فیس بوک و... که بایستی پروتکل OAuth ار پیاده سازی کرده باشد.
2️⃣ OAuth Client
وب سایت یا اپلیکیشنی که اجزای دسترسی به اطلاعاتمان را به آن میدهیم.
3️⃣ Resource Owner
شخصی که اطلاعات آن در اختیار Resource Provider است.
طی این فرایند شما با اعطای مجوز به OAuth Client و دریافت یک access token این امکان را به OAuth Client میدهید که به اطلاعات شما از طریق آن access token دسترسی داشته باشد .
@fullStackDevs
🌀OAuth authorization
🔹 در این پست می آموزیم که OAuth چیست.
درابتدا باید بدانیم که OAuth مخفف Open Authorization میباشد.
OAuth
🔸 یک پروتکل برای اهدای مجوز برای دسترسی به اطلاعات کاربر توسط اپلیکیشنی دیگر است.
این پروتکل ابتدا در سال 2007 معرفی شد و توسط توییتر استفاده شد و با توجه به استقبال و گستردگی ان در سال 2010 نسخه OAuth 2.0 توسط IEFT (جامعه بین المللی آزاد از طراحان شبکه ، اپراتورها ، فروشندگان و محققانی است که بر روی تدوین استانداردهای فنی برای اینترنت کار می کنند.) معرفی شد.
🔻 برای مثال ممکن است موقع ثبت نام در سایتی گزینه هایی همچون “login with Google” یا “login with Facebook” را دیده باشید که عملیات login را بسیار ساده میکند و با اعطای مجوز دسترسی به اطلاعاتتان به سایتی که میخواهید در آن حساب بسازید عملیات ورود و ساخت حساب را انجام میدهید.
✔️ سه اجزایی که در یک مکانیزم OAuth وجود دارند عبارتند از :
1️⃣ OAuth Provider , Resource Provider
سرویسی که با دریافت تاییدیه امکان استفاده از اطلاعات کاربر را به یک اپلیکیشن دیگر میدهد. مانند گوگل ، فیس بوک و... که بایستی پروتکل OAuth ار پیاده سازی کرده باشد.
2️⃣ OAuth Client
وب سایت یا اپلیکیشنی که اجزای دسترسی به اطلاعاتمان را به آن میدهیم.
3️⃣ Resource Owner
شخصی که اطلاعات آن در اختیار Resource Provider است.
طی این فرایند شما با اعطای مجوز به OAuth Client و دریافت یک access token این امکان را به OAuth Client میدهید که به اطلاعات شما از طریق آن access token دسترسی داشته باشد .
@fullStackDevs
Web Devs
🌀 Specification pattern: C# implementation در این پست به معرفی الگوی Specification میپردازیم و یک مثال فوق العده کاربردی ارائه میدهیم که یک گام معماری و کدتان به Domain Driven Design و Clean Code نزدیکتر میکند. *توضیحات تکمیلی : این پست را بهتر است با تلگرام…
#LinqBuilder
#SpecificationPattern
LinqBuilder takes advantage of the specification pattern for filtering and ordering of LINQ queries.
LinqBuilder is based on the specification pattern.
Github
NuGet Packages :
https://www.nuget.org/packages?q=linqbuilder
@fullStackDevs
#SpecificationPattern
LinqBuilder takes advantage of the specification pattern for filtering and ordering of LINQ queries.
LinqBuilder is based on the specification pattern.
Github
NuGet Packages :
https://www.nuget.org/packages?q=linqbuilder
@fullStackDevs
#SVG
#ScalableVectorGraphics
🔻 این SVG چیست و چرا باید از آن استفاده کنیم؟
ما می خواهیم تا همه تصاویر و ترسیمات در سایت هایی که خلق می کنیم به بهترین، زیباترین، و با کیفیت ترین حالت ممکن قابل مشاهده باشند. همچنین بدلیل Performance و یا همان کارایی می خواهیم اندازه فایل را کم نگه داریم. برای رسیدن به این هدف در مورد آیکون ها، لوگوها و ترسیمات ساده در سایت فقط یک راه وجود دارد.
➖ ما به عنوان طراح سایت میخواهیم که تصاویری داشته باشیم که به هر اندازه که بخواهیم بزرگشان کنیم و کیفیتشان از بین نرود که با SVG امکان پذیراست اما قبل تر با وجود مرورگرهای قدیمی ما را از استفاده از چنین قابلیتی دور نگه می داشت. اما خوشبختانه امروزه می توان از این قابلیت بهره برد.
➖ این بدین معنی نیست که در آینده نزدیک از تصاویری با فرمت های PNG، JPG و غیره دیگر استفاده نمی شود، نه، بلکه آنها همچنان کاربرد خود را در وب خواهند داشت و در کنار SVG به حیات خود در دنیای وب ادامه خواهند داد.
🔻 حالا SVG چیست؟
SVG (Scalable Vector Graphics)
در دنیای کامپیوتر ترسیمات می توانند از دو نوع Raster یا Vector باشند.
➖ در Raster Graphics یا گرافیک شطرنجی تصویر به صورت مجموعه ای از پیکسلها ذخیره میشود و رنگ هر پیکسل به طور جداگانه ذخیره میشود. تغییر اندازه این تصاویر کیفیت آنها را تحث تاثیر قرار می دهد. اکثر فرمتهای رایج فایلهای تصویری مانند jpg، gif، و bmp بر مبنای گرافیک شطرنجی هستند.
➖ در Vector Graphics یا گرافیک برداری روشی در تولید و ذخیرهٔ فایلهای تصویری کامپیوتری است که در آن تصویر در قالب مجموعهای از مشخصات هندسی نقاط، خطها، منحنیها و چندضلعیها ذخیره میشود. واژهٔ «بردار» در این کاربرد معنایی وسیعتر از یک خط راست دارد.
➖ تصاویر تعریف شده به کمک گرافیک برداری، از خطوط و منحنیهایی به نام بردار تشکیل شدهاند که به صورت ریاضی تعریف میشوند. اجزای این تصاویر را میتوان بدون از دست دادن کیفیت به راحتی جا به جا کرد و تغییر اندازه داد.
➖ این تصاویر مستقل از رزولوشن هستند و میتوان آنها را بزرگ و کوچک کرد و در هر رزولوشن بدون از دست دادن جزئیات و وضوح چاپ کرد. یکی از شناخته شده ترین فرمتهای ذخیرهٔ فایلهای گرافیک برداری، فرمت SVG است.
➖ در SVG بر اساس XML است این یعنی سینتکس آن خیلی هم غریبه نخواهد بود و به HTML شباهت دارد. به این صورت که برای ترسیم شکل های مختلف تگ های مختلف وجود دارد مثلا برای ترسیم دایره از تگ
ادامه در پست بعدی ...
@fullStackDevs
#ScalableVectorGraphics
🔻 این SVG چیست و چرا باید از آن استفاده کنیم؟
ما می خواهیم تا همه تصاویر و ترسیمات در سایت هایی که خلق می کنیم به بهترین، زیباترین، و با کیفیت ترین حالت ممکن قابل مشاهده باشند. همچنین بدلیل Performance و یا همان کارایی می خواهیم اندازه فایل را کم نگه داریم. برای رسیدن به این هدف در مورد آیکون ها، لوگوها و ترسیمات ساده در سایت فقط یک راه وجود دارد.
➖ ما به عنوان طراح سایت میخواهیم که تصاویری داشته باشیم که به هر اندازه که بخواهیم بزرگشان کنیم و کیفیتشان از بین نرود که با SVG امکان پذیراست اما قبل تر با وجود مرورگرهای قدیمی ما را از استفاده از چنین قابلیتی دور نگه می داشت. اما خوشبختانه امروزه می توان از این قابلیت بهره برد.
➖ این بدین معنی نیست که در آینده نزدیک از تصاویری با فرمت های PNG، JPG و غیره دیگر استفاده نمی شود، نه، بلکه آنها همچنان کاربرد خود را در وب خواهند داشت و در کنار SVG به حیات خود در دنیای وب ادامه خواهند داد.
🔻 حالا SVG چیست؟
SVG (Scalable Vector Graphics)
در دنیای کامپیوتر ترسیمات می توانند از دو نوع Raster یا Vector باشند.
➖ در Raster Graphics یا گرافیک شطرنجی تصویر به صورت مجموعه ای از پیکسلها ذخیره میشود و رنگ هر پیکسل به طور جداگانه ذخیره میشود. تغییر اندازه این تصاویر کیفیت آنها را تحث تاثیر قرار می دهد. اکثر فرمتهای رایج فایلهای تصویری مانند jpg، gif، و bmp بر مبنای گرافیک شطرنجی هستند.
➖ در Vector Graphics یا گرافیک برداری روشی در تولید و ذخیرهٔ فایلهای تصویری کامپیوتری است که در آن تصویر در قالب مجموعهای از مشخصات هندسی نقاط، خطها، منحنیها و چندضلعیها ذخیره میشود. واژهٔ «بردار» در این کاربرد معنایی وسیعتر از یک خط راست دارد.
➖ تصاویر تعریف شده به کمک گرافیک برداری، از خطوط و منحنیهایی به نام بردار تشکیل شدهاند که به صورت ریاضی تعریف میشوند. اجزای این تصاویر را میتوان بدون از دست دادن کیفیت به راحتی جا به جا کرد و تغییر اندازه داد.
➖ این تصاویر مستقل از رزولوشن هستند و میتوان آنها را بزرگ و کوچک کرد و در هر رزولوشن بدون از دست دادن جزئیات و وضوح چاپ کرد. یکی از شناخته شده ترین فرمتهای ذخیرهٔ فایلهای گرافیک برداری، فرمت SVG است.
➖ در SVG بر اساس XML است این یعنی سینتکس آن خیلی هم غریبه نخواهد بود و به HTML شباهت دارد. به این صورت که برای ترسیم شکل های مختلف تگ های مختلف وجود دارد مثلا برای ترسیم دایره از تگ
<circle/>استفاده می شود و در نهایت همه اشکال، درون یک تگ
<svg />قرار می گیرند.
ادامه در پست بعدی ...
@fullStackDevs
Wikipedia
گرافیک شطرنجی
نگاشتار شطرنجی یا گرافیک شطرنجی (به انگلیسی: Raster Graphics) روشی از گرافیک است که به وسیله تقسیم کردن تصویر به چهارخانههای کوچک یا عناصر کوچک تصویر که پیکسل نام دارند ساخته میشود. پیکسلها، محتوای اطلاعاتی مثل حافظ، کنترل شفافیت و رنگ میباشند. این اطلاعات…
ادامه پست قبل
🔻 چرا SVG ؟
🔹 مستقل از رزولوشن
یکی از نقاط قوت SVG این است که در صفحه نمایش هایی با کیفیت بسیار بالا هم به بهترین شکل نمایش داده می شود و کیفیتش تغییر نمی کند. برخلاف تصاویر Raster که کیفیت خود را از دست می دهند و مجبوریم برای صفحه نمایش هایی با کیفیت بالاتر نسخه با کیفیت تری از تصویر را نمایش دهیم.
دیگر مهم نیست اندازه تصویر چه باشد، یا چقدر کاربر Zoom کند و یا اینکه کیفیت صفحه نمایش کاربر چه اندازه باشد. در همه این موارد SVG قصه ما همان حالت با کیفیت و تیزش را حفظ می کند.
🔸 سازگار با CSS
از اونجایی که SVG هم مثل HTML یک markup است می تواند Class یا css داشته باشد و از آن طریق در css می تواند در دسترس باشد.
پس می توانیم روی ترسیمات برداری از طریق css کارهای زیادی انجام دهیم که این کار برای ترسیمات Raster امکان پذیر نمی باشد.
فرض کنید مستطیلی را از طریق SVG ساخته ایم می توانیم رنگ آن را بصورت های مختلف تغییر دهیم ولی اگر همان مستطیل از نوع تصاویر معمولی مثلا با فرمت PNG بود می توان گفت دیگر این امکان برای ما وجود نداشت.
🔹 تعامل پذیری ساده از طریق Javascript
به همان دلیلی که SVG با CSS سازگار است می توان گفت که به راحتی می توان از طریق جاواسکریپت با آن تعامل داشت و مواردی مثل انیمیشن و غیره را به راحتی پیاده و در نتیجه تجربه کاربری و تعاملی خوبی را به سادگی برای کاربر مهیا کرد.
🔸 درخواست HTTP کمتر
هر زمان که بواسطه تگ <img> از تصویری به صورت عادی در یک صفحه وب استفاده کنید مرورگر برای ترسیم آن تصویر یک درخواست HTTP به سرور می فرستد تا تصویر را از سرور گرفته و نمایش دهد. اگر از روش خطی برای SVG استفاده کنیم SVG بصورت مستقیم در فایل HTML قرار دارد و دیگر نیازی به یک درخواست جداگانه برای تصویر ما نخواهد بود.
🔹 ویرایش ساده
برای تغییر یک فایل SVG فقط به یک ویرایشگر متن نیاز داریم این یعنی در همان محیط کدنویسی می توانیم ویراش مورد نظرمان را انجام دهیم. اما اگر یک تصویر Raster را بخواهیم ویرایش کنیم باید به فوتوشاب یا مشابه آن پناه ببریم.
🔸 حجم فایل کمتر
ترسیمات وکتور معمولا حجم کمتری را می گیرند مخصوصا اگر شکل و طرح ساده ای داشته باشند. پس فایل تصویر ما سایز کمتری خواهد داشت. همچنین فشرده سازی بصورت بهتری روی SVG اعمال می شود. پس می توان از نظر سایز صفحه وب هم با استفاده از SVG صرفه جویی داشته باشیم که از نظر کارایی کمک بسیار خوبی برای سایت ما خواهد بود.
🔹طراحی واکنشگرا
اگر تصویر شما می تواند بصورت SVG باشد دیگر نگرانی برای واکنشگرا بودن آن نخواهید داشت. ولی در صورت استفاده از تصاویری با فرمت PNG یا JPG شاید مجبور شوید تا در صفحه نمایش های مختلف نسخه های مختلفی از آن تصاویر را قرار دهید.
✔️ بهترین موارد استفاده SVG :
▪️ آیکون ها
▫️ ترسیمات ساده مثل شکل های مختلف
▪️ بنرهای تبلیغاتی
▫️ ترسیمات متحرک
▪️ اینفوگراف ها و مصورسازی داده ها
می باشند.
🌀 واضح است که اگر تصویری از یک منظره داشته باشیم که توسط یک عکاس گرفته شده است، نمایش آن بوسیله SVG منطقی نخواهد بود چرا که در این مورد حجم فایل به مراتب بیشتر از فرمت PNG یا JPG خواهد بود.
@fullStackDevs
🔻 چرا SVG ؟
🔹 مستقل از رزولوشن
یکی از نقاط قوت SVG این است که در صفحه نمایش هایی با کیفیت بسیار بالا هم به بهترین شکل نمایش داده می شود و کیفیتش تغییر نمی کند. برخلاف تصاویر Raster که کیفیت خود را از دست می دهند و مجبوریم برای صفحه نمایش هایی با کیفیت بالاتر نسخه با کیفیت تری از تصویر را نمایش دهیم.
دیگر مهم نیست اندازه تصویر چه باشد، یا چقدر کاربر Zoom کند و یا اینکه کیفیت صفحه نمایش کاربر چه اندازه باشد. در همه این موارد SVG قصه ما همان حالت با کیفیت و تیزش را حفظ می کند.
🔸 سازگار با CSS
از اونجایی که SVG هم مثل HTML یک markup است می تواند Class یا css داشته باشد و از آن طریق در css می تواند در دسترس باشد.
پس می توانیم روی ترسیمات برداری از طریق css کارهای زیادی انجام دهیم که این کار برای ترسیمات Raster امکان پذیر نمی باشد.
فرض کنید مستطیلی را از طریق SVG ساخته ایم می توانیم رنگ آن را بصورت های مختلف تغییر دهیم ولی اگر همان مستطیل از نوع تصاویر معمولی مثلا با فرمت PNG بود می توان گفت دیگر این امکان برای ما وجود نداشت.
🔹 تعامل پذیری ساده از طریق Javascript
به همان دلیلی که SVG با CSS سازگار است می توان گفت که به راحتی می توان از طریق جاواسکریپت با آن تعامل داشت و مواردی مثل انیمیشن و غیره را به راحتی پیاده و در نتیجه تجربه کاربری و تعاملی خوبی را به سادگی برای کاربر مهیا کرد.
🔸 درخواست HTTP کمتر
هر زمان که بواسطه تگ <img> از تصویری به صورت عادی در یک صفحه وب استفاده کنید مرورگر برای ترسیم آن تصویر یک درخواست HTTP به سرور می فرستد تا تصویر را از سرور گرفته و نمایش دهد. اگر از روش خطی برای SVG استفاده کنیم SVG بصورت مستقیم در فایل HTML قرار دارد و دیگر نیازی به یک درخواست جداگانه برای تصویر ما نخواهد بود.
🔹 ویرایش ساده
برای تغییر یک فایل SVG فقط به یک ویرایشگر متن نیاز داریم این یعنی در همان محیط کدنویسی می توانیم ویراش مورد نظرمان را انجام دهیم. اما اگر یک تصویر Raster را بخواهیم ویرایش کنیم باید به فوتوشاب یا مشابه آن پناه ببریم.
🔸 حجم فایل کمتر
ترسیمات وکتور معمولا حجم کمتری را می گیرند مخصوصا اگر شکل و طرح ساده ای داشته باشند. پس فایل تصویر ما سایز کمتری خواهد داشت. همچنین فشرده سازی بصورت بهتری روی SVG اعمال می شود. پس می توان از نظر سایز صفحه وب هم با استفاده از SVG صرفه جویی داشته باشیم که از نظر کارایی کمک بسیار خوبی برای سایت ما خواهد بود.
🔹طراحی واکنشگرا
اگر تصویر شما می تواند بصورت SVG باشد دیگر نگرانی برای واکنشگرا بودن آن نخواهید داشت. ولی در صورت استفاده از تصاویری با فرمت PNG یا JPG شاید مجبور شوید تا در صفحه نمایش های مختلف نسخه های مختلفی از آن تصاویر را قرار دهید.
✔️ بهترین موارد استفاده SVG :
▪️ آیکون ها
▫️ ترسیمات ساده مثل شکل های مختلف
▪️ بنرهای تبلیغاتی
▫️ ترسیمات متحرک
▪️ اینفوگراف ها و مصورسازی داده ها
می باشند.
🌀 واضح است که اگر تصویری از یک منظره داشته باشیم که توسط یک عکاس گرفته شده است، نمایش آن بوسیله SVG منطقی نخواهد بود چرا که در این مورد حجم فایل به مراتب بیشتر از فرمت PNG یا JPG خواهد بود.
@fullStackDevs
Telegram
Web Devs
#SVG
#ScalableVectorGraphics
🔻 این SVG چیست و چرا باید از آن استفاده کنیم؟
ما می خواهیم تا همه تصاویر و ترسیمات در سایت هایی که خلق می کنیم به بهترین، زیباترین، و با کیفیت ترین حالت ممکن قابل مشاهده باشند. همچنین بدلیل Performance و یا همان کارایی می خواهیم…
#ScalableVectorGraphics
🔻 این SVG چیست و چرا باید از آن استفاده کنیم؟
ما می خواهیم تا همه تصاویر و ترسیمات در سایت هایی که خلق می کنیم به بهترین، زیباترین، و با کیفیت ترین حالت ممکن قابل مشاهده باشند. همچنین بدلیل Performance و یا همان کارایی می خواهیم…
Forwarded from Web Devs
#DesignPatterns
در مهندسی نرم افزار الگو های طراحی یک راه حل عمومیه تکرار پذیر برای حل یک مشکل رایج در هنگام طراحی نرم افزار می باشد.
به عبارتی الگو های طراحی یک راه کار نهایی که به طور مستقیم میتوان انرا به کد تبدیل کرد نیست بلکه توضیح یا قالبی است برای اینکه ، چطور میتوان مشکلی که به راه های متفاوت پدیدار میشود را حل کرد.
الگو های طراحی روند سرعت توسعه نرم افزار را با ارائه روش های تست شده افزایش میدهند.
یک طراحی موثر و تاثیر گذاری نیازمند مسائلی است که ممکن است تا زمان پیاده سازی قابل رویت نباشد .
استفاده از الگوهای طراحی باعث جلوگیری از مسائل جرئی که بروز مشکلاتی بزرگ را دربر دارد، میشوند.
استفاده از الگوهای طراحی باعث میشود که کد شما قابل انعطاف تر و نگهداری آن آسان تر و همچنین راحتر بتوان دوباره از ان استفاده کرد و هیچ لزومی ندارد که همیشه این الگوهای طراحی را در پروژه های خود استفاده کنید ،الگوهای طراحی برای توسعه پروژه منظور نمی شوند بلکه برای حل مسائل متداول در نظر گرفته شده اند.هر وقت که به آنها نیاز داشتید بایستی الگوی مناسبی برای جلوگیری از بروز چنین مشکلی در آینده پیاده سازی کنید برای تشخیص اینکه برای چه مشکلی از چه الگویی استفاده کنید فقط باید سعی کنید که الگو های طراحی و مهم تر از ان هدف از هر الگو را درک کنید
الگوهای طراحی براساس هدف هر الگو به سه دسته تقسیم میشوند.
🔹Behavioural
🔸Creational
🔹Structural
1️⃣ Creational
این نوع الگو ها در مورد نحوه نمونه سازی از کلاس ها میباشند و انها را میتوان به class-creation و object-creational دسته بندی کرد.این به این معنی است که در زمان انجام Job و پیاده سازی الگو برای دسترسی به ویژگی های یک کلاس یا میتوان از طریق ارث بری از ویژگی های ان استفاده کرد یا اینکه با ساخت یک نمونه از کلاس هدف به ویژگی های ان نیز دسترسی داشت.
الگو های Creational عبارتند از :
این نوع از الگوها مربوط به سازماندهی کلاس ها و اشیاء مختلف برای تشکیل ساختارهای بزرگتر و ارائه قابلیت های جدید است.
الگو های Structural عبارتند از :
این نوع از الگو ها در مورد شناسایی الگوهای ارتباطی مشترک بین اشیاء و تحقق این الگوهاست دروافع الگوهای رفتاری آن الگوهایی هستند که به طور خاص به ارتباط بین اشیاء مربوط می شوند.
الگو های Behavioral عبارتند از :
💎 Acting out rather than speaking out became a pattern 💎
@fullStackDevs
در مهندسی نرم افزار الگو های طراحی یک راه حل عمومیه تکرار پذیر برای حل یک مشکل رایج در هنگام طراحی نرم افزار می باشد.
به عبارتی الگو های طراحی یک راه کار نهایی که به طور مستقیم میتوان انرا به کد تبدیل کرد نیست بلکه توضیح یا قالبی است برای اینکه ، چطور میتوان مشکلی که به راه های متفاوت پدیدار میشود را حل کرد.
الگو های طراحی روند سرعت توسعه نرم افزار را با ارائه روش های تست شده افزایش میدهند.
یک طراحی موثر و تاثیر گذاری نیازمند مسائلی است که ممکن است تا زمان پیاده سازی قابل رویت نباشد .
استفاده از الگوهای طراحی باعث جلوگیری از مسائل جرئی که بروز مشکلاتی بزرگ را دربر دارد، میشوند.
استفاده از الگوهای طراحی باعث میشود که کد شما قابل انعطاف تر و نگهداری آن آسان تر و همچنین راحتر بتوان دوباره از ان استفاده کرد و هیچ لزومی ندارد که همیشه این الگوهای طراحی را در پروژه های خود استفاده کنید ،الگوهای طراحی برای توسعه پروژه منظور نمی شوند بلکه برای حل مسائل متداول در نظر گرفته شده اند.هر وقت که به آنها نیاز داشتید بایستی الگوی مناسبی برای جلوگیری از بروز چنین مشکلی در آینده پیاده سازی کنید برای تشخیص اینکه برای چه مشکلی از چه الگویی استفاده کنید فقط باید سعی کنید که الگو های طراحی و مهم تر از ان هدف از هر الگو را درک کنید
الگوهای طراحی براساس هدف هر الگو به سه دسته تقسیم میشوند.
🔹Behavioural
🔸Creational
🔹Structural
1️⃣ Creational
این نوع الگو ها در مورد نحوه نمونه سازی از کلاس ها میباشند و انها را میتوان به class-creation و object-creational دسته بندی کرد.این به این معنی است که در زمان انجام Job و پیاده سازی الگو برای دسترسی به ویژگی های یک کلاس یا میتوان از طریق ارث بری از ویژگی های ان استفاده کرد یا اینکه با ساخت یک نمونه از کلاس هدف به ویژگی های ان نیز دسترسی داشت.
الگو های Creational عبارتند از :
Factory Method, Abstract Factory, Builder, Singleton, Object Pool, Prototype
2️⃣ Structuralاین نوع از الگوها مربوط به سازماندهی کلاس ها و اشیاء مختلف برای تشکیل ساختارهای بزرگتر و ارائه قابلیت های جدید است.
الگو های Structural عبارتند از :
Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Private Class Data, Proxy
3️⃣ Behavioralاین نوع از الگو ها در مورد شناسایی الگوهای ارتباطی مشترک بین اشیاء و تحقق این الگوهاست دروافع الگوهای رفتاری آن الگوهایی هستند که به طور خاص به ارتباط بین اشیاء مربوط می شوند.
الگو های Behavioral عبارتند از :
Command, Interpreter, Iterator, Mediator, Memento, Null Object, Observer, State, Strategy, Template method, Visitor
در ادامه نیز به بررسی این الگو ها میپردازیم.💎 Acting out rather than speaking out became a pattern 💎
@fullStackDevs
#Amaizing_DI_Libraries
#SimpleInjector
💫 SimpleInjector
یک DI Container بسیار ساده و قابل انعطاف که هدف آن سوق دادن توسعه دهنگان به سمت گود موفقیت میباشد.
پلترفرم هایی که توسط این لایبری ساپورت میشود :
▪️.NET 4.0 and up.
▪️ .NET Standard including:
▫️ Universal Windows Programs.
▫️ Mono.
▫️.NET Core.
▫️Xamarin.
🔸Simple Injector Integration libraries for AspNetCore
🔹
🔹
Simple injector nuget packages
Simple Injector on github
Simple Injector website & doc
📣 @fullStackDevs
#SimpleInjector
💫 SimpleInjector
یک DI Container بسیار ساده و قابل انعطاف که هدف آن سوق دادن توسعه دهنگان به سمت گود موفقیت میباشد.
پلترفرم هایی که توسط این لایبری ساپورت میشود :
▪️.NET 4.0 and up.
▪️ .NET Standard including:
▫️ Universal Windows Programs.
▫️ Mono.
▫️.NET Core.
▫️Xamarin.
🔸Simple Injector Integration libraries for AspNetCore
🔹
SimpleInjector.Integration.AspNetCore
🔹
SimpleInjector.Integration.AspNetCore.Mvc.Core
🔹SimpleInjector.Integration.AspNetCore.Mvc
All of the above available on nuget nowSimple injector nuget packages
Simple Injector on github
Simple Injector website & doc
📣 @fullStackDevs
کدام یک از دو موضوع زیر را به عنوان پست آتی کانال Web Devs ترجیح میدهید؟
Anonymous Poll
41%
1- الگوی MediatR چیست و نحوه پیاده سازی آن.
59%
2 - محل درست قرار گرفتن Caching در معماری پروژه ها و یک پیاده سازی اصولی از آن
Web Devs
کدام یک از دو موضوع زیر را به عنوان پست آتی کانال Web Devs ترجیح میدهید؟
با سلام خدمت اعضای محترم کانال Web Devs در مورد نظر سنجی اخیر کانال و توضیحاتی پیرامون آن جهت رفع شبهات.
در مورد گزینه یک منظور ما الگوی Mediator بوده است . و به دلیل تشابه اسمی بسیار نزدیک آن به کتابخانه MediatR و اشتباه تایپی پیش آمده در نظر سنجی در پست های آتی به معرفی این کتابخانه نیز میپردازیم.
با تشکر
@fullStackDevs
در مورد گزینه یک منظور ما الگوی Mediator بوده است . و به دلیل تشابه اسمی بسیار نزدیک آن به کتابخانه MediatR و اشتباه تایپی پیش آمده در نظر سنجی در پست های آتی به معرفی این کتابخانه نیز میپردازیم.
با تشکر
@fullStackDevs
Web Devs
#PersianDateTime #CSharp 🔹 ساختار تاریخ شمسی با متد های تبدیل به تاریخ میلادی و یا هجری 🔸 متدهای مختلف برای بدست آوردن رشته های مختلف تاریخ شمسی با فرمت های متفاوت و اعداد فارسی 🔹 پشتیبانی از سال کبیسه 🔸 شبیه سازی کامل ساختار DateTime .NetFramework 4.5 نصب…
#PersianDateTime
#CSharp
#NetStandard2.0
🔹 ساختار تاریخ شمسی با متد های تبدیل به تاریخ میلادی و یا هجری
.NetStandard 2.0
🔳 It is supported in .NET Core 2.0, in the .NET Framework 4.6.1 and later versions
نصب پکیج :
#CSharp
#NetStandard2.0
🔹 ساختار تاریخ شمسی با متد های تبدیل به تاریخ میلادی و یا هجری
.NetStandard 2.0
🔳 It is supported in .NET Core 2.0, in the .NET Framework 4.6.1 and later versions
نصب پکیج :
Install-Package ABluePersianDateTime -Version 2.0.2@fullStackDevs
dotnet add package ABluePersianDateTime --version 2.0.2
paket add ABluePersianDateTime --version 2.0.2
#ItemTemplate
🔻 در این پست می خواهیم یه تغییر کوچک در ItemTemplate های ویژال استادیو بدیم 🤔
💬 احتمالا بیشتر اوقات در هنگام کد نویسی درگیر این موضوع هستید و این مسئله جزئی شاید کمی اعصاب خرد کن نیز برای شما باشد.
همانطور که میدانید در هنگام افزودن یک کلاس از ItemTemplate های ویژال استادیو ، Access Modifier ای که کلاس دارد به صورت پیشفرض internal است البته این keyword از دید شما هاید(hide) بوده و کلاس به صورت زیر برای شما ساخته میشود.
🔸 در طول کدنویسی خیلی کمتر پیش می اید که یک کلاس را به صورت internal لازم داشته باشیم و عموما بعد از ساخت هر کلاس از جمله کار هایی که دائما انجام میدهیم تغییر Access Modifier ان به صورت public است.
☑️ حال میخواهیم با یک تغییر کوچک در itemTemplate های ویژال استادیو کاری کنیم که از این به بعد کلاس ها به طور پیشفرض به صورت پابلیک برای ما ساخته شوند.
این کار بسیار اسان است کافیست در مسیر هایی زیر که برای هر نسخه از ویژال استادیو مشخص شده است فایل class.cs را ویرایش کرده و کیوورد public را با یک فاصله قبل کلمه کلاس اضافه کنید به این شکل
☑️ از این به بعد خواهید دید که کلاس ساخته شده توسط ویژال استادیو برای شما به صورت پیشفرض public خواهد بود.
🔔 محل فایل class.cs برای هر نسخه از ویژال استادیو
VS2012 :
VS2015 :
VS2019 (Professional) :
@fullStackDevs
🔻 در این پست می خواهیم یه تغییر کوچک در ItemTemplate های ویژال استادیو بدیم 🤔
💬 احتمالا بیشتر اوقات در هنگام کد نویسی درگیر این موضوع هستید و این مسئله جزئی شاید کمی اعصاب خرد کن نیز برای شما باشد.
همانطور که میدانید در هنگام افزودن یک کلاس از ItemTemplate های ویژال استادیو ، Access Modifier ای که کلاس دارد به صورت پیشفرض internal است البته این keyword از دید شما هاید(hide) بوده و کلاس به صورت زیر برای شما ساخته میشود.
namespace WebDevs.Posts
{
class Class1
{
}
}
🔸 در طول کدنویسی خیلی کمتر پیش می اید که یک کلاس را به صورت internal لازم داشته باشیم و عموما بعد از ساخت هر کلاس از جمله کار هایی که دائما انجام میدهیم تغییر Access Modifier ان به صورت public است.
☑️ حال میخواهیم با یک تغییر کوچک در itemTemplate های ویژال استادیو کاری کنیم که از این به بعد کلاس ها به طور پیشفرض به صورت پابلیک برای ما ساخته شوند.
این کار بسیار اسان است کافیست در مسیر هایی زیر که برای هر نسخه از ویژال استادیو مشخص شده است فایل class.cs را ویرایش کرده و کیوورد public را با یک فاصله قبل کلمه کلاس اضافه کنید به این شکل
using System;
using System.Collections.Generic;
$if$ ($targetframeworkversion$ >= 3.5)using System.Linq;
$endif$using System.Text;
$if$ ($targetframeworkversion$ >= 4.5)using System.Threading.Tasks;
$endif$
namespace $rootnamespace$
{
public class $safeitemrootname$
{
}
}
☑️ از این به بعد خواهید دید که کلاس ساخته شده توسط ویژال استادیو برای شما به صورت پیشفرض public خواهد بود.
🔔 محل فایل class.cs برای هر نسخه از ویژال استادیو
VS2012 :
C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\ItemTemplates\CSharp\Code\1033\Class
VS2015 :
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\ItemTemplates\CSharp\Code\1033\Class
VS2017(RC) : C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\ItemTemplates\CSharp\Code\1033\Class
VS2017(Professional) : C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\ItemTemplates\CSharp\Code\1033\Class
VS2019 (Enterprise) : C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\ItemTemplates\CSharp\Code\1033\Class\Class.cs
VS2019 (Professional) :
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\ItemTemplates\CSharp\Code\1033\Class\Class.cs
VS2019 (Preview) : C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\Common7\IDE\ItemTemplates\CSharp\Code\1033\Class\Class.cs
⚠️ توجه فرمایید که برای سایر نسخه ها نیز مسیر ها با ورژن های متناظر ذکر شده یکسان است . مثلا مسیر نسخه VS2017 community با VS2017 Professional یکسان است. برای سایرین نیز به همین شکل میباشد.@fullStackDevs
Forwarded from Code in Depth (ali yousefi ramand)
سلام دوستان
من علی یوسفی هستم و یه کانال زدم که توش مباحث مفهومی جاوااسکریپت رو به صورت طبقه بندی شده تدریس میکنم.
اگر دوست داشتید عضو بشید😉
@codeInDepth
من علی یوسفی هستم و یه کانال زدم که توش مباحث مفهومی جاوااسکریپت رو به صورت طبقه بندی شده تدریس میکنم.
اگر دوست داشتید عضو بشید😉
@codeInDepth
This media is not supported in your browser
VIEW IN TELEGRAM
#DesignModel
Design mode in google chrome!
در قسمت کنسول DevTools در کروم (F12) و وارد کردن دستور زیر در تب console اون صفحه قابل ویرایش خواهد شد .
@fullStackDevs
Design mode in google chrome!
در قسمت کنسول DevTools در کروم (F12) و وارد کردن دستور زیر در تب console اون صفحه قابل ویرایش خواهد شد .
@fullStackDevs
👍1
#Developers_Best_Practices
در این پست بهترین کار هایی که یک توسه دهنده میتونه انجام بده رو معرفی میکنیم.💡
همیشه به دنبال Best Practices برای برنامه ها و تکنولوژی هایی که استفاده میکنیم بودیم و گاها فراموش میکنیم که یک برنامه نویس خوب یه کد خوب می نویسه . نه اینکه یک کد خوب یه برنامه نویس خوب بسازه. این روند یه روند از بالا به پایینه پس تا خودتون رو بهبود نبخشین خروجی مهارت هاتون هم آنچنان تغییری نمیکنه .
💎 Practice
تمرین
اول بیایین یاد بگیریم اصلا تمرین چه معنی میده ؟
آیا تمرین یه رفتاره یا یه روند تکراریه یا کارهایی که لازم نیس روزانه دائما بخاطر داشته باشین که حتما انجامش بدین و طبق عادت انجام میشه.
تیراندازی، رانندگی و نوشتن
همه مهارت های ذکر شده حاصل تمرین هستش وقتی شروع به رانندگی میکنین باید هر محله شو به خاطر بسپارین و قبل انجام هر کاری فکر کنین اما به محض اینکه موفق به انجام یک رانندگی خوب شدین ،دیگه لازم نیس هی دائما مراحل رو حفظ کنین. چون تبدیل به یک عادت و یک امر عادی برای شما میشه.
توسعه نرم افزار هم با مهارت های ذکر شده تفاوتی نداره و برای اینکه به یک توسعه دهنده موفق تبدیل بشین باید و باید تمرین کنین.
❇️ Keep Reading Existing Software Source Code
آیا اصلا کد های نرم افزار ها یا کتابخونه های دیگه رو که به صورت متن باز منتشر میشن میخونین؟
فقط تعداد اندکی از توسعه دهنده ها پاسخ مثبت به این سوال میدن چون خوندن کدها کار کسل کننده ایه. اگر شما هم این کار رو یه کار کسل کننده میدونین و انجامش نمیدین باید بهتون بگم مهم ترین کاری که یک توسعه دهنده میتونه تو زندگیش انجام بده رو دارین از دست میدین. برای مثال اگه بخواین رمان نویس بشین .آیا در عین واحد میتونین شروع به نوشتن رمان کنین؟ قطعا پاسخ نه هست. برای اینکه یک رمان نویس خوب بنویسین اول باید صد ها رمان بخونین.
❇️ Complete your documents before next step
یکی از بدترین کارهایی که یک توسعه دهنده میتونه انجام بده مستقیم سراغ کد رفتنه . قبل از انجام هر کاری ابتدا دانسته ها و مستندات خودتون رو در مورد اون کار تکمیل کنین و بعد به سراغ مرحله کد نوشتن برین .قبل از استفاده از هر ابزاری یا تکنولوژی اول مستنداتش رو بخونین و تست هاشو ببینین. اگه غیر از این عمل کنین، در مرحله بعد خودتون رو داخل یک مشکل بزرگ پیدا میکنین. اینو همیشه سر لوحه کارتون قرار بدین که Documentation is the Key
فراموش نکنین که چیزهایی که امروز یاد میگیرن شمارو برای فردا اماده میکنه.
❇️ Follow the defined standards, don't create it
این نکته خیلی مهمه که همیشه سعی کنین از استاندارد هایی که توسط همه پذیرفته شده پیروی کنید و سعی نکنین دورباره اون هارو بسازین . این استاندارد ها توسط دولوپر هایی با سالها تجربه تنظیم و ساخته شده و پیروی کردن از این استاندارد ها مثل این میمونه که دارین پا تو ردپایه بزرگ اونها میذارین.
❇️ Code should be written to be reviewed
فراموش نکنین که کد باید طوری نوشته بشه تا توسط دیگران یا بعدا خودتون قابل بررسی باشه
سعی کنین بعد از اینکه کدی رو مینویسین حداقل یکبار خودتون مرورش کنین و به نوعی تو ذهنتون کامپایلش کنین اینجوری تا 90% مشکلاتی که وجود داره یا ممکنه وجود بیاد رو خودتون حل میکنین. بعد از تمام این مراحل از یه نفر بخاین که کد شمار رو بررسی کنه و از این بابت که داره ایرادات کد شمارو متذکر میشه بسیار خوشحال و سپاسگذار باشین.
بررسی شدن کدتون حتی اگه کدتون ضعیف باشه توسط دیگران به شما می اموزه که یک کد قوی بنویسین به شرط اینکه از نکاتش درس بگیرین و اون رو مثبت بشمارین.
هدفتون از کد نویسی ابتدا جلوگیری از باگ باشه و نوشتن یه کد بدون باگ. مثل Tester ها فک کنین و اینطور فک کردن و کد نوشتن برای کسی هم که کدتون رو تست میکنه میتونه یه چالش باشه.
❇️ Testing to be followed like a religion
به تست کردن کدتون مثل دینتون پایبند باشین.کدهاتونو بعد از هر تغییر بزرگ و کوچیکی تست کنین و اصلا به اینکه از زمانبندی تون عقب میوفتین اهمیت ندین
یادتون باشه موقع طراحی نرم افزار چیزی به نام "اعتماد" وجود نداره .
از اینکه باگ ها رو تو کدتون پیدا میکنین ناراحت نباشین و برعکس جشنش بگیرین و اصلا از اینکه Tester تو کدتون باگ پیدا میکنه ناراحت نباشین فراموش نکین که :
باگ ها دشمن شما هستن و باید اونارو بکشین و اشتباه ها تازمانی خوب ان که اونها رو تکرار نکنین.
❇️ Keep your Code and Documents Safe
یه توسعه دهنده باهوش عادت داره که از کارهای روزانش backup بگیره ازطرف دیگه اگه سیستمون crash کنه و به طریقی کدهاتون از بین بره درواقع اونی که crash کرده و از بین رفته شمایین.
پس نهایتا توصیه ای که میشه اینکه حتما از سورس کنترل ها استفاده کنین.
@fullStackDevs
در این پست بهترین کار هایی که یک توسه دهنده میتونه انجام بده رو معرفی میکنیم.💡
همیشه به دنبال Best Practices برای برنامه ها و تکنولوژی هایی که استفاده میکنیم بودیم و گاها فراموش میکنیم که یک برنامه نویس خوب یه کد خوب می نویسه . نه اینکه یک کد خوب یه برنامه نویس خوب بسازه. این روند یه روند از بالا به پایینه پس تا خودتون رو بهبود نبخشین خروجی مهارت هاتون هم آنچنان تغییری نمیکنه .
💎 Practice
تمرین
اول بیایین یاد بگیریم اصلا تمرین چه معنی میده ؟
آیا تمرین یه رفتاره یا یه روند تکراریه یا کارهایی که لازم نیس روزانه دائما بخاطر داشته باشین که حتما انجامش بدین و طبق عادت انجام میشه.
تیراندازی، رانندگی و نوشتن
همه مهارت های ذکر شده حاصل تمرین هستش وقتی شروع به رانندگی میکنین باید هر محله شو به خاطر بسپارین و قبل انجام هر کاری فکر کنین اما به محض اینکه موفق به انجام یک رانندگی خوب شدین ،دیگه لازم نیس هی دائما مراحل رو حفظ کنین. چون تبدیل به یک عادت و یک امر عادی برای شما میشه.
توسعه نرم افزار هم با مهارت های ذکر شده تفاوتی نداره و برای اینکه به یک توسعه دهنده موفق تبدیل بشین باید و باید تمرین کنین.
❇️ Keep Reading Existing Software Source Code
آیا اصلا کد های نرم افزار ها یا کتابخونه های دیگه رو که به صورت متن باز منتشر میشن میخونین؟
فقط تعداد اندکی از توسعه دهنده ها پاسخ مثبت به این سوال میدن چون خوندن کدها کار کسل کننده ایه. اگر شما هم این کار رو یه کار کسل کننده میدونین و انجامش نمیدین باید بهتون بگم مهم ترین کاری که یک توسعه دهنده میتونه تو زندگیش انجام بده رو دارین از دست میدین. برای مثال اگه بخواین رمان نویس بشین .آیا در عین واحد میتونین شروع به نوشتن رمان کنین؟ قطعا پاسخ نه هست. برای اینکه یک رمان نویس خوب بنویسین اول باید صد ها رمان بخونین.
❇️ Complete your documents before next step
یکی از بدترین کارهایی که یک توسعه دهنده میتونه انجام بده مستقیم سراغ کد رفتنه . قبل از انجام هر کاری ابتدا دانسته ها و مستندات خودتون رو در مورد اون کار تکمیل کنین و بعد به سراغ مرحله کد نوشتن برین .قبل از استفاده از هر ابزاری یا تکنولوژی اول مستنداتش رو بخونین و تست هاشو ببینین. اگه غیر از این عمل کنین، در مرحله بعد خودتون رو داخل یک مشکل بزرگ پیدا میکنین. اینو همیشه سر لوحه کارتون قرار بدین که Documentation is the Key
فراموش نکنین که چیزهایی که امروز یاد میگیرن شمارو برای فردا اماده میکنه.
❇️ Follow the defined standards, don't create it
این نکته خیلی مهمه که همیشه سعی کنین از استاندارد هایی که توسط همه پذیرفته شده پیروی کنید و سعی نکنین دورباره اون هارو بسازین . این استاندارد ها توسط دولوپر هایی با سالها تجربه تنظیم و ساخته شده و پیروی کردن از این استاندارد ها مثل این میمونه که دارین پا تو ردپایه بزرگ اونها میذارین.
❇️ Code should be written to be reviewed
فراموش نکنین که کد باید طوری نوشته بشه تا توسط دیگران یا بعدا خودتون قابل بررسی باشه
سعی کنین بعد از اینکه کدی رو مینویسین حداقل یکبار خودتون مرورش کنین و به نوعی تو ذهنتون کامپایلش کنین اینجوری تا 90% مشکلاتی که وجود داره یا ممکنه وجود بیاد رو خودتون حل میکنین. بعد از تمام این مراحل از یه نفر بخاین که کد شمار رو بررسی کنه و از این بابت که داره ایرادات کد شمارو متذکر میشه بسیار خوشحال و سپاسگذار باشین.
بررسی شدن کدتون حتی اگه کدتون ضعیف باشه توسط دیگران به شما می اموزه که یک کد قوی بنویسین به شرط اینکه از نکاتش درس بگیرین و اون رو مثبت بشمارین.
هدفتون از کد نویسی ابتدا جلوگیری از باگ باشه و نوشتن یه کد بدون باگ. مثل Tester ها فک کنین و اینطور فک کردن و کد نوشتن برای کسی هم که کدتون رو تست میکنه میتونه یه چالش باشه.
❇️ Testing to be followed like a religion
به تست کردن کدتون مثل دینتون پایبند باشین.کدهاتونو بعد از هر تغییر بزرگ و کوچیکی تست کنین و اصلا به اینکه از زمانبندی تون عقب میوفتین اهمیت ندین
یادتون باشه موقع طراحی نرم افزار چیزی به نام "اعتماد" وجود نداره .
از اینکه باگ ها رو تو کدتون پیدا میکنین ناراحت نباشین و برعکس جشنش بگیرین و اصلا از اینکه Tester تو کدتون باگ پیدا میکنه ناراحت نباشین فراموش نکین که :
باگ ها دشمن شما هستن و باید اونارو بکشین و اشتباه ها تازمانی خوب ان که اونها رو تکرار نکنین.
❇️ Keep your Code and Documents Safe
یه توسعه دهنده باهوش عادت داره که از کارهای روزانش backup بگیره ازطرف دیگه اگه سیستمون crash کنه و به طریقی کدهاتون از بین بره درواقع اونی که crash کرده و از بین رفته شمایین.
پس نهایتا توصیه ای که میشه اینکه حتما از سورس کنترل ها استفاده کنین.
@fullStackDevs
#Free
#tools
Remove Image Background
🧩ابزاری رایگان برای حذف Background
فقط کافیه تصویر مورد نظرتون را آپلود کنید !
📌 www.remove.bg
@fullStackDevs
#tools
Remove Image Background
🧩ابزاری رایگان برای حذف Background
فقط کافیه تصویر مورد نظرتون را آپلود کنید !
📌 www.remove.bg
@fullStackDevs
#gRPC
🔸 یک بررسی ساده و مفید از پروتکل gRPC
برای اینکه بدانیم gRPC چیست ابتدا باید با rpc و Protocol Buffers اشنایی داشته باشیم .
1️⃣ RPC
مخفف Remote Procedure Call می باشد و همچنین به عنوان subroutine call و function call نیز شناخته میشود.
در واقع RPC پروتکلی هست که یک برنامه می تواند با استفاده از ان به یک برنامه که در کامپیوتری دیگر واقع شده است بدون اینکه اطلاعاتی در مورد شبکه داشته باشد درخواست ارسال کند.
از این پروتکل در شبکه های client-server استفاده میشود.
یک درخواست RPC یک عملیات synchronous است و برنامه درخواست دهنده تا زمانی که سرور درخواستش را پردازش و نتیجه را بازگرداند منتظر مانده و block میشود.
2️⃣ Protocol Buffers
پروتکل بافر که protobuf هم گفته میشود یک روش سریالیزه کردن اطلاعات است که توسط گوگل برای استفاده داخلی توسعه یافته بود که بعداً برای استفاده عموم منتشر شد. از این روش برای برقرار کردن ارتباطات بین برنامهها توسط سیم یا ذخیره کردن اطلاعات استفاده میشود. این روش شامل یک زبان توصیف میانی و یک کامپایلر که کدهای مختلف برای زبانهای برنامهنویسی مختلف از این زبان توصیف میانی تولید میکند، است.
در ابتدای ارائه توسط "گوگل"، کامپایلر آن فقط برای زبانهای C++، جاوا و پایتون، کد تولید میکرد ولی توسط اشخاص ثالث، برای خیل بیشتر زبانهای دیگر هم ابزارهایی ارائه شده است.
❇️ grpc
حال که با این مفاهیم اشنا شدیم نوبت به gRPC میرسد.gRPC یک پروتکلی است که هر دوی این ها را پیاده ساری کرده و ویژگی اصلی ان این است که زبان های برنامه نویسی زیادی را پشتیبانی میکند. و اپلیکیشن ها براساس معماری TCP client-server با این پروتکل با هم ارتباط برقرار میکنند.
این به این معنی است که سرور endpoint های مشخصی را تعریف میکند که توسط هر client ای که قادر است از طریق TCP protocol با سرور ارتباط برقرار کند صدا زده میشود و شما میتوانید همانند REST به این endpoint ها فک کنید و رابط هایی برای سرور برای کار کردن با انها فراهم بیاورید.
پروتکل های زیادی هستند که چنین امکانات و ارتباطاتی را ممکن میسازند اما gRPC ویزگی هایی را به ارمغان می اورد که دیگر پروتکل ها ندارند.
1. این پروتکل در داخل گوگل استفاده میشود پس مراحل تست های خود را دیگر گذرانده است.
2. از انجایی که پیام ها به صورت باینری تبادل میشوند بنابراین به پهنای باند کمتر نسبت به جیسون و ایکس ام ال دارید.
3. جی آر سی پی بسیار پرطرفدار است و لایبری های زیادی برای تعداد زیادی زبان برنامه نویسی وجود دارد تا از آن استفاده کنید.
4. محبوبیت زیاد مستندات خوب و همچنین انجمن هایی را به وجود می اورد که شما را میتواند در کار کردن با ان کمک کند.
@fullStackDevs
🔸 یک بررسی ساده و مفید از پروتکل gRPC
برای اینکه بدانیم gRPC چیست ابتدا باید با rpc و Protocol Buffers اشنایی داشته باشیم .
1️⃣ RPC
مخفف Remote Procedure Call می باشد و همچنین به عنوان subroutine call و function call نیز شناخته میشود.
در واقع RPC پروتکلی هست که یک برنامه می تواند با استفاده از ان به یک برنامه که در کامپیوتری دیگر واقع شده است بدون اینکه اطلاعاتی در مورد شبکه داشته باشد درخواست ارسال کند.
از این پروتکل در شبکه های client-server استفاده میشود.
یک درخواست RPC یک عملیات synchronous است و برنامه درخواست دهنده تا زمانی که سرور درخواستش را پردازش و نتیجه را بازگرداند منتظر مانده و block میشود.
2️⃣ Protocol Buffers
پروتکل بافر که protobuf هم گفته میشود یک روش سریالیزه کردن اطلاعات است که توسط گوگل برای استفاده داخلی توسعه یافته بود که بعداً برای استفاده عموم منتشر شد. از این روش برای برقرار کردن ارتباطات بین برنامهها توسط سیم یا ذخیره کردن اطلاعات استفاده میشود. این روش شامل یک زبان توصیف میانی و یک کامپایلر که کدهای مختلف برای زبانهای برنامهنویسی مختلف از این زبان توصیف میانی تولید میکند، است.
در ابتدای ارائه توسط "گوگل"، کامپایلر آن فقط برای زبانهای C++، جاوا و پایتون، کد تولید میکرد ولی توسط اشخاص ثالث، برای خیل بیشتر زبانهای دیگر هم ابزارهایی ارائه شده است.
❇️ grpc
حال که با این مفاهیم اشنا شدیم نوبت به gRPC میرسد.gRPC یک پروتکلی است که هر دوی این ها را پیاده ساری کرده و ویژگی اصلی ان این است که زبان های برنامه نویسی زیادی را پشتیبانی میکند. و اپلیکیشن ها براساس معماری TCP client-server با این پروتکل با هم ارتباط برقرار میکنند.
این به این معنی است که سرور endpoint های مشخصی را تعریف میکند که توسط هر client ای که قادر است از طریق TCP protocol با سرور ارتباط برقرار کند صدا زده میشود و شما میتوانید همانند REST به این endpoint ها فک کنید و رابط هایی برای سرور برای کار کردن با انها فراهم بیاورید.
پروتکل های زیادی هستند که چنین امکانات و ارتباطاتی را ممکن میسازند اما gRPC ویزگی هایی را به ارمغان می اورد که دیگر پروتکل ها ندارند.
1. این پروتکل در داخل گوگل استفاده میشود پس مراحل تست های خود را دیگر گذرانده است.
2. از انجایی که پیام ها به صورت باینری تبادل میشوند بنابراین به پهنای باند کمتر نسبت به جیسون و ایکس ام ال دارید.
3. جی آر سی پی بسیار پرطرفدار است و لایبری های زیادی برای تعداد زیادی زبان برنامه نویسی وجود دارد تا از آن استفاده کنید.
4. محبوبیت زیاد مستندات خوب و همچنین انجمن هایی را به وجود می اورد که شما را میتواند در کار کردن با ان کمک کند.
@fullStackDevs
Wikipedia
پروتکل بافرز
پروتکل بافرز، یک روش سریالیزه کردن اطلاعات است که توسط گوگل برای استفاده داخلی توسعه یافته بود که بعداً برای استفاده عموم منتشر شد. از این روش برای برقرار کردن ارتباطات بین برنامهها توسط سیم یا ذخیره کردن اطلاعات استفاده میشود. این روش شامل یک زبان توصیف…
👍2
#Xamarin
#Announcing
Xamarin Announcements from .NET Conf 2019
Today at .NET Conf 2019, we shared some exciting announcements for Xamarin and Visual Studio developers, including:
▫️ XAML Hot Reload for Xamarin.Forms:
Make changes to your XAML UI. See them reflected live on your emulator, simulator, or physical device.
▪️ Xamarin Hot Restart:
Test changes made to your app, including multi-file code edits, resources, and references, while using a much faster build and deploy cycle.
▫️ iOS 13 and Android 10:
Take advantage of the full power and performance of native platforms and APIs. Including iPadOS, dark mode, and foldable support.
Content link:
https://devblogs.microsoft.com/xamarin/xamarin-dotnet-conf-2019/
@fullStackDevs
Tutorial Links :
Xamarin 101: Part 1 - Introduction to Xamarin
Xamarin 101: Part 2 - Installing Xamarin
Xamarin 101: Part 3 - Solution Architecture
Xamarin 101: Part 4 - Building a Xamarin.Forms UI with XAML
Xamarin 101: Part 5 - Xamarin.Forms MVVM with XAML
Xamarin 101: Part 6 - Xamarin.Forms Navigation with XAML
Xamarin 101: Part 7 - Wrapping Up
@fullStackDevs
#Announcing
Xamarin Announcements from .NET Conf 2019
Today at .NET Conf 2019, we shared some exciting announcements for Xamarin and Visual Studio developers, including:
▫️ XAML Hot Reload for Xamarin.Forms:
Make changes to your XAML UI. See them reflected live on your emulator, simulator, or physical device.
▪️ Xamarin Hot Restart:
Test changes made to your app, including multi-file code edits, resources, and references, while using a much faster build and deploy cycle.
▫️ iOS 13 and Android 10:
Take advantage of the full power and performance of native platforms and APIs. Including iPadOS, dark mode, and foldable support.
Content link:
https://devblogs.microsoft.com/xamarin/xamarin-dotnet-conf-2019/
@fullStackDevs
Tutorial Links :
Xamarin 101: Part 1 - Introduction to Xamarin
Xamarin 101: Part 2 - Installing Xamarin
Xamarin 101: Part 3 - Solution Architecture
Xamarin 101: Part 4 - Building a Xamarin.Forms UI with XAML
Xamarin 101: Part 5 - Xamarin.Forms MVVM with XAML
Xamarin 101: Part 6 - Xamarin.Forms Navigation with XAML
Xamarin 101: Part 7 - Wrapping Up
@fullStackDevs
Xamarin Blog
Xamarin Announcements from .NET Conf 2019 | Xamarin Blog
.NET Conf 2019 announcements for Xamarin & Visual Studio developers that enable better performance and capabilities of iOS and Android apps.
#JS
#Blocks
Creating beautiful websites (UI) without writing code
A JSX-based page builder
⚠️ Currently under development
blocks-ui.com
Github
@fullStackDevs
#Blocks
Creating beautiful websites (UI) without writing code
A JSX-based page builder
⚠️ Currently under development
blocks-ui.com
Github
@fullStackDevs
#Caching
کشینگ (Caching) چیست؟
از جمله مواردی که استفاده درست و بجا از آن به طور قابل ملاحظه ای باعث افزایش کارایی برنامه میشود Caching میباشد.درواقع Caching مکانیزمی است که داده ها را ذخیره میکند تا درخواست های آینده برای آن داده ها سریعتر انجام شود و نتیجه به کلاینت زودتر بازگشت داده شود.داده های ذخیره شده می تواند نتیجه محاسبات قبلی یا کپی ای از داده های دیگر در جای دیگری باشد.این کار برای جلوگیری از محاسبات تکراری و یا کاهش درخواست ها به دیتابیس،برای داده هایی که امکان تغییر مداوم آنها کم است و همچنین هزینه محاسبه و یا ساخت دوباره آن زیاد است، صورت میگیرد.
خوشبخانه AspNetCore از روش های مختلف Caching پشتیبانی میکند.
از جمله این روش ها به Cache In Memory و Distributed Cache می توان اشاره کرد.
روش Cache In Memory از حافظه رم سرور برای ذخیره داده های کش شده استفاده میکند. این نوع Cache متناسب برای یک سرور است و برای استفاده از این روش زمانی که چند سرور دارید از ویژگی یا تکنینک Sticky session ( که به معنی درخواست های کلاینت به همان سروری که داده ها را Cache کرده برای پردازش Route میشوند) استفاده کرد.
از روش Distributed Cache برای share کردن داده های کش شده بین چندین سرور استفاده میشود. معمولا داده ها در یک سرور خارجی نگه داشته میشوند و دیگر سرور ها به آن دسترسی دارند.
محل قرا گیری عملیات Caching در معماری پروژه هایمان کجاست؟
معماری رایج در بین وب اپلیکیشن ها غالبا یک معماری تمیز (Clean Architecture) میباشد . و ما در این پست به قرار دادن عملیات مربوط به caching در چنین معماری هایی میپردازیم.
در این قبیل معماری ها براساس اصول طراحی و قوائد تعیین شده در DDD اپلیکیشن به لایه هایی تقسیم میشود و به ترتیب داخلی ترین لایه که Domain layer میباشد و کمترین وابستگی را به یک Dll خارجی دارد و هرچه به لایه های بالاتر میرویم وابستگی لایه ها به یکدیگر بیشتر میشود. از ویژگی های یک معماری خوب Loose Coupling در بین لایه ها میباشد یعنی وابستگی لایه ها به یکدیگر را بقدری کاهش داد که با تغییر یک لایه خللی در کار دیگر لایه ها صورت نگیرد. البته در این تعریف منظور از کاهش وابستگی یعنی کاهش وابستگی در زمان Compile time.
در یک Clean Architecture یا به عبارتی در یک Clean DDD Architecture معمولا لایه های بدین شکل خواهند بود :
1 - Domain|Core layer
2 - Services | Application Layer
3 - Infrastructure Layer
4 - UI Layer
در لایه Domain اپلیکیشن Entitiy ها و Contract ها(interface) های قرار میگیرد و در لایه Infrastructure معمولا پیاده سازی دسترسی به داده ها و دیگر سرویس ها خارجی مانند FileLogger و SmtpNotifier میباشد.این لایه امکان دسترسی و ذخیره سازی دائمی داده ها را ممکن میسازد،همچنین اطلاعات موجود Domain Entity ها در دیتابیس یا هر store دیگری به صورت دائمی در این لایه برای ذخیره، پیاده سازی میشود.از سوی دیگر ریپازیتوری های ما در این لایه پیاده سازی میشوند.(ریپازیتوری محلی است که امکان دسترسی یه اینتیتی ها و valueObject ها را فراهم میکند).
برای پیدا کردن محل درست caching باید با وظیفه یک عامل دیگر اشنا باشیم.
Repository pattern
الگوی طراحی ریپازیتوری یک روش برای انتزاعی کردن دسترسی به داده ها به جای استفاده Concrete شده از آنها میباشد.
از جمله دلیل استفاده از این الگو جلوگیری از دوباره نویسی Query ها و همچنین امکان تغییر دیتابیس یا ORM اپلیکیشن را میتوان بر شمرد.
همانطور که گفتیم ریپازیتوری راه دسترسی ما به داده هاست ، این داده ها ممکن از از دیتابیس واکشی شوند یا اینکه از Cache خوانده شوند و از آنجایی که پیاده سازی الگوی Repository در لایه Infrastructure صورت میگیرد پس در نتیجه لایه قرارگیری caching نیز در همین لایه و در ریپازیتوری میباشد .
اما پیاده سازی caching در داخل خود ریپازیتوری چند مشکل اساسی دارد، مشکل، عدم تست پذیری و نقض اصل اول Solid یعنی Single responsibility میباشد.
برای حل این مشکل یک الگوی طراحی Structural به کمک ما می آید و با پیاده سازی آن این مشکل را حل میکنیم.
در این قسمت به بررسی یک سری از مسائل پایه پرداختیم و در قسمت بعدی این پست به طریقه پیاده سازی آن خواهیم پرداخت.
@fullStackDevs
کشینگ (Caching) چیست؟
از جمله مواردی که استفاده درست و بجا از آن به طور قابل ملاحظه ای باعث افزایش کارایی برنامه میشود Caching میباشد.درواقع Caching مکانیزمی است که داده ها را ذخیره میکند تا درخواست های آینده برای آن داده ها سریعتر انجام شود و نتیجه به کلاینت زودتر بازگشت داده شود.داده های ذخیره شده می تواند نتیجه محاسبات قبلی یا کپی ای از داده های دیگر در جای دیگری باشد.این کار برای جلوگیری از محاسبات تکراری و یا کاهش درخواست ها به دیتابیس،برای داده هایی که امکان تغییر مداوم آنها کم است و همچنین هزینه محاسبه و یا ساخت دوباره آن زیاد است، صورت میگیرد.
خوشبخانه AspNetCore از روش های مختلف Caching پشتیبانی میکند.
از جمله این روش ها به Cache In Memory و Distributed Cache می توان اشاره کرد.
روش Cache In Memory از حافظه رم سرور برای ذخیره داده های کش شده استفاده میکند. این نوع Cache متناسب برای یک سرور است و برای استفاده از این روش زمانی که چند سرور دارید از ویژگی یا تکنینک Sticky session ( که به معنی درخواست های کلاینت به همان سروری که داده ها را Cache کرده برای پردازش Route میشوند) استفاده کرد.
از روش Distributed Cache برای share کردن داده های کش شده بین چندین سرور استفاده میشود. معمولا داده ها در یک سرور خارجی نگه داشته میشوند و دیگر سرور ها به آن دسترسی دارند.
محل قرا گیری عملیات Caching در معماری پروژه هایمان کجاست؟
معماری رایج در بین وب اپلیکیشن ها غالبا یک معماری تمیز (Clean Architecture) میباشد . و ما در این پست به قرار دادن عملیات مربوط به caching در چنین معماری هایی میپردازیم.
در این قبیل معماری ها براساس اصول طراحی و قوائد تعیین شده در DDD اپلیکیشن به لایه هایی تقسیم میشود و به ترتیب داخلی ترین لایه که Domain layer میباشد و کمترین وابستگی را به یک Dll خارجی دارد و هرچه به لایه های بالاتر میرویم وابستگی لایه ها به یکدیگر بیشتر میشود. از ویژگی های یک معماری خوب Loose Coupling در بین لایه ها میباشد یعنی وابستگی لایه ها به یکدیگر را بقدری کاهش داد که با تغییر یک لایه خللی در کار دیگر لایه ها صورت نگیرد. البته در این تعریف منظور از کاهش وابستگی یعنی کاهش وابستگی در زمان Compile time.
در یک Clean Architecture یا به عبارتی در یک Clean DDD Architecture معمولا لایه های بدین شکل خواهند بود :
1 - Domain|Core layer
2 - Services | Application Layer
3 - Infrastructure Layer
4 - UI Layer
در لایه Domain اپلیکیشن Entitiy ها و Contract ها(interface) های قرار میگیرد و در لایه Infrastructure معمولا پیاده سازی دسترسی به داده ها و دیگر سرویس ها خارجی مانند FileLogger و SmtpNotifier میباشد.این لایه امکان دسترسی و ذخیره سازی دائمی داده ها را ممکن میسازد،همچنین اطلاعات موجود Domain Entity ها در دیتابیس یا هر store دیگری به صورت دائمی در این لایه برای ذخیره، پیاده سازی میشود.از سوی دیگر ریپازیتوری های ما در این لایه پیاده سازی میشوند.(ریپازیتوری محلی است که امکان دسترسی یه اینتیتی ها و valueObject ها را فراهم میکند).
برای پیدا کردن محل درست caching باید با وظیفه یک عامل دیگر اشنا باشیم.
Repository pattern
الگوی طراحی ریپازیتوری یک روش برای انتزاعی کردن دسترسی به داده ها به جای استفاده Concrete شده از آنها میباشد.
از جمله دلیل استفاده از این الگو جلوگیری از دوباره نویسی Query ها و همچنین امکان تغییر دیتابیس یا ORM اپلیکیشن را میتوان بر شمرد.
همانطور که گفتیم ریپازیتوری راه دسترسی ما به داده هاست ، این داده ها ممکن از از دیتابیس واکشی شوند یا اینکه از Cache خوانده شوند و از آنجایی که پیاده سازی الگوی Repository در لایه Infrastructure صورت میگیرد پس در نتیجه لایه قرارگیری caching نیز در همین لایه و در ریپازیتوری میباشد .
اما پیاده سازی caching در داخل خود ریپازیتوری چند مشکل اساسی دارد، مشکل، عدم تست پذیری و نقض اصل اول Solid یعنی Single responsibility میباشد.
برای حل این مشکل یک الگوی طراحی Structural به کمک ما می آید و با پیاده سازی آن این مشکل را حل میکنیم.
در این قسمت به بررسی یک سری از مسائل پایه پرداختیم و در قسمت بعدی این پست به طریقه پیاده سازی آن خواهیم پرداخت.
@fullStackDevs
blog.airbrake.io
Domain-Driven Design: What is it and how do you use it?
A detailed look at domain-driven design in software development, including basic implementation and a handful of advantages and disadvantages of its use.
#Github
#WebDevsOnGithub
با سلام خدمت اعضای محترم کانال 📣 WebDevs
🌀اتفاق خوبی که افتاده اینکه برای کانال یک organization در گیت هاب ساخته ایم 🤩.
🔹 از این به بعد هر یک از سورس ها در قالب یک ریپازیتوری اون جا قرار داده میشه و میتونین سورس ها رو بررسی کنین و خواندن سورس ها هم به مراتب راحت تره.
بررسی و مشاهده از طریق این 👈 لینک
@fullStackDevs
#WebDevsOnGithub
با سلام خدمت اعضای محترم کانال 📣 WebDevs
🌀اتفاق خوبی که افتاده اینکه برای کانال یک organization در گیت هاب ساخته ایم 🤩.
🔹 از این به بعد هر یک از سورس ها در قالب یک ریپازیتوری اون جا قرار داده میشه و میتونین سورس ها رو بررسی کنین و خواندن سورس ها هم به مراتب راحت تره.
بررسی و مشاهده از طریق این 👈 لینک
@fullStackDevs