آموزش مقدماتی ساخت صفحه توسط Blazor
HttpContext در BlazorSSR
نحوه بروز رسانی برنامه های Blazor
در این ویدیوی آموزشی با نحوه و تکنیکهای لازم جهت بروز رسانی برنامههای Blazor آشنا میشوید. این بروز رسانی همه حالتهای برنامههای Blazor شامل:
-Blazor Server
-Blazor WebAssembly
-Blazor WebAssembly PWA رو شامل میشه. سورس کدهای این ویدیو هم در این آدرس در دسترس هست.
تعریف مقدماتی fluent interface در ویکی پدیا به شرح زیر است: (+)
In software engineering, a fluent interface (as first coined by Eric Evans and Martin Fowler) is a way of implementing an object oriented API in a way that aims to provide for more readable code.
به صورت خلاصه هدف آن فراهم آوردن روشی است که بتوان متدها را زنجیر وار فراخوانی کرد و به این ترتیب خوانایی کد نوشته شده را بالا برد. پیاده سازی آن هم شامل دو نکته است:
الف) نوع متد تعریف شده باید مساوی با نام کلاس جاری باشد.
ب) در این حالت خروجی متدهای ما کلمه کلیدی this خواهند بود.
برای مثال:
using System;
namespace FluentInt
{
public class FluentApiTest
{
private int _val;
public FluentApiTest Number(int val)
{
_val = val;
return this;
}
public FluentApiTest Abs()
{
_val = Math.Abs(_val);
return this;
}
public bool IsEqualTo(int val)
{
return val == _val;
}
}
}
if (new FluentApiTest().Number(-10).Abs().IsEqualTo(10))
{
Console.WriteLine("Abs(-10)==10");
}
خوب! این مطلبی است که همه جا پیدا میکنید و مطلب جدیدی هم نیست. اما موردی را که سخت میشود یافت این است که طراحی کلاس فوق ایراد دارد. برای مثال شما میتوانید ترکیبهای زیر را هم تشکیل دهید و کار میکند؛ یا به عبارتی برنامه کامپایل میشود و این خوب نیست:
if(new FluentApiTest().Abs().Number(-10).IsEqualTo(10)) ...
if (new FluentApiTest().Abs().IsEqualTo(10)) ...
ولی ... این روش هم صحیح نیست. از ابتدای کار نباید بتوان متد بیربطی را در طول این زنجیره مشاهده کرد. اگر قرار نیست استفاده گردد، نباید هم در intellisense ظاهر شود و پس از آن هم نباید قابل کامپایل باشد.
بنابراین صورت مساله به این ترتیب اصلاح میشود:
میخواهیم پس از نوشتن FluentApiTest و قرار دادن یک نقطه، در intellisense فقط Number ظاهر شود و نه هیچ متد دیگری. پس از ذکر متد Number فقط متد Abs یا مواردی شبیه به آن مانند Sqrt ظاهر شوند. پس از انتخاب مثلا Abs آنگاه متد IsEqualTo توسط Intellisense قابل دسترسی باشد. در روش اول فوق، به صورت دوستانه همه چیز در دسترس است و هر ترکیب قابل کامپایلی را میشود با متدها ساخت که این مورد نظر ما نیست.
اینبار پیاده سازی اولیه به شرح زیر تغییر خواهد کرد:
using System;
namespace FluentInt
{
public class FluentApiTest
{
public MathMethods<FluentApiTest> Number(int val)
{
return new MathMethods<FluentApiTest>(this, val);
}
}
public class MathMethods<TParent>
{
private int _val;
private readonly TParent _parent;
public MathMethods(TParent parent, int val)
{
_val = val;
_parent = parent;
}
public Restrictions<MathMethods<TParent>> Abs()
{
_val = Math.Abs(_val);
return new Restrictions<MathMethods<TParent>>(this, _val);
}
}
public class Restrictions<TParent>
{
private readonly int _val;
private readonly TParent _parent;
public Restrictions(TParent parent, int val)
{
_val = val;
_parent = parent;
}
public bool IsEqualTo(int val)
{
return _val == val;
}
}
}
if (new FluentApiTest().Number(-10).Abs().IsEqualTo(10))
{
Console.WriteLine("Abs(-10)==10");
}
در پیاده سازی کلاس MathMethods از Generics استفاده شده به این جهت که بتوان نوع متد Number را بر همین اساس تعیین کرد تا متدهای کلاس MathMethods در Intellisense (یا به قولی در طول زنجیره مورد نظر) ظاهر شوند. کلاس Restrictions نیز به همین ترتیب معرفی شده است و از آن جهت تعریف نوع متد Abs استفاده کردیم. هر کلاس جدید در طول زنجیره، توسط سازنده خود به وهلهای از کلاس قبلی به همراه مقادیر پاس شده دسترسی خواهد داشت. به این ترتیب زنجیرهای را تشکیل دادهایم که سازمان یافته است و نمیتوان در آن متدی را بیجهت پیش یا پس از دیگری صدا زد و همچنین دیگر نیازی به بررسی نحوهی فراخوانیهای یک مصرف کننده نیز نخواهد بود زیرا برنامه کامپایل نمیشود.
dialog element در Chrome 37 Beta
https://github.com/GoogleChrome/dialog-polyfill
Your browser doesn't seem to support dialog element yet. This demo is running in polyfill mode.
C#.NET for non-engineers.
The first course of "A Sr. Developer Course" courses. which contains:
1- C# Fundamentals for non-engineers.
2- DataBase for non-engineers.
3- Asp.NET WebForm for Non-engineers.
4- Application Architecture for no-engineers.
5- ASP.NET MVC for non-engineers.
6- Angular for non-engineers.
This is a course for who knows noting about C# and development if you know nothing about Array, variable, loop, and conditions you are in the right place.
at the end of this course, we will create one small university registration console application together.
You will learn in this course:
C#.NET
.NET Framework
Methods
Recursive methods
C# Primitive Types/Complex Types
conditions
switch case
Arrays
if statement
switch
loops
Creating a method
ref, out
enums
OOP/Object-oriented programing
Generics
Error handling
problem-solving
working with files
level: beginners to upper intermediate