اشتراکها
معرفی bg-splitter
نظرات مطالب
React 16x - قسمت 1 - معرفی و شروع به کار
مقایسه React و Angular
بازنویسی این قسمت در اینجا: مسیریابی در Angular
نظرات مطالب
یک نکته درباره Angular routeProvider
بله. من از Angular Dynamic Routing استفاده میکنم.
SortedSet قرار گرفته در فضای نام System.Collections.Generic دات نت 4، لیستی از اشیاء به صورت خودکار مرتب شده را ارائه میدهد. SortedSet نیز همانند HashSet از اعضای منحصربفردی تشکیل خواهد شد اما اینبار به شکلی مرتب شده. برای پیاده سازی آن از red-black tree data structure استفاده شده است که مهمترین مزیت آن امکان افزودن و یا حذف اشیاء به آن بدون کاهش قابل توجه کارآیی برنامه است.
مثال اول:
using System;
using System.Collections.Generic;
namespace SortedSetTest
{
class Program
{
static void sample1()
{
var setRange = new SortedSet<int> { 2, 5, 6, 2, 1, 4, 8 };
foreach (var i in setRange)
{
Console.WriteLine(i);
}
}
static void Main()
{
sample1();
}
}
}
مثال دوم:
using System;
using System.Collections.Generic;
namespace SortedSetTest
{
class Program
{
static void sample2()
{
var setRange = new SortedSet<int>();
var random = new Random();
for (int counter = 0; counter < 100; counter++)
{
var rnd = random.Next(-180, 181);
if (!setRange.Add(rnd))
{
Console.WriteLine("Couldn't add {0}", rnd);
}
}
Console.WriteLine("Result set:");
foreach (var item in setRange)
{
Console.WriteLine(item);
}
}
static void Main()
{
sample2();
}
}
}
مثال سوم:
اگر از سایر انواع سفارشی تعریف شده استفاده نمائید، باید روش مقایسهی آنها را نیز با پیاده سازی اینترفیس استاندارد IComparable ارائه دهید؛ در غیر اینصورت با خطای At least one object must implement IComparable متوقف خواهید شد.
using System;
using System.Collections;
using System.Collections.Generic;
namespace SortedSetTest
{
class FileInfo
{
public string Name { set; get; }
public long Size { set; get; }
}
class FileInfoComparer : IComparer<FileInfo>
{
public int Compare(FileInfo x, FileInfo y)
{
var caseiComp = new CaseInsensitiveComparer();
return caseiComp.Compare(x.Name, y.Name);
}
}
class Program
{
static void sample3()
{
var setRange = new SortedSet<FileInfo>(new FileInfoComparer())
{
new FileInfo
{
Name = "file1.txt",
Size = 100
},
new FileInfo
{
Name = "file2.txt",
Size = 10
},
new FileInfo
{
Name = "file3.txt",
Size = 300
}
};
foreach (var item in setRange)
{
Console.WriteLine(item.Name);
}
}
static void Main()
{
sample3();
Console.WriteLine("Press a key...");
Console.ReadKey();
}
}
}
در این مثال اشیایی از نوع کلاس FileInfo به لیست ویژهی ما اضافه شدهاند. برای اینکه امکان مقایسهی آنها فراهم باشد ، کلاس FileInfoComparer با پیاده سازی اینترفیس IComparer ، روش مقایسه دو شیء از این دست را ارائه میدهد.
postgres یک بانک اطلاعاتی متن باز، قدرتمند و relational میباشد که پس از 30 سال توسعهی فعال، به کارآیی بالا، قابل اطمینان بودن و قدرتمند بودن شهرت دارد. همچنین در بنچمارکهای مربوط به وبسایت techempower نیز استفاده از این پایگاه داده در کنار asp.net core باعث شدهاست تا جایگاه خوبی کسب شود. علاوه بر این ویژگیها، انعطاف نوع دادهها (data type) سبب تفاوت بین رقبا شده است. برای مثال فرض کنید که یک جدول به اسم Blog و قصد ذخیره تگهای مقاله را داریم. کار به چه صورت خواهد بود؟
- ساخت جدول و رابطه چند به چند
ایراد قطعه کد اول عدم امکان سرچ اصولی در بین کلمات کلیدی میباشد؛ زیرا شما مجبور به جستجو در یک فیلد هستید که واژهها با کاراکتری از یکدیگر جدا شدهاند. پس شما سرچ دقیقی نخواهید داشت. پس از این مشکل میتوان به وجود تگهای تکراری در یک رکورد و یا نداشتن تگها به صورت یکپارچه اشاره کرد و به عنوان مشکل آخر میتواند به یک سربار برای سیستم تبدیل شود. چون هر بار که دیتا واکشی میشود، باید یکبار کلمات را از یکدیگر جدا و سپس به یک آرایه تبدیل و هنگام ذخیره شدن نیز مجددا این رشتهها را به هم بچسبانیم.
در مورد کد دوم هم شاید بتوان به انباشته شدن زیاد سطرها و یا عدم ساختار مدرن اشاره کرد.
اگر پیشتر با postgres آشنایی نداشته باشید، یکی از دو سناریو زیر را پیاده سازی خواهید کرد:
- ذخیره در یک فیلد به صورت nvarchar و جدا کردن حرفها با یک کاراکتر (برای مثال: dntips, csharp با کارکتر , از هم جدا شده اند)
Blog ID BlogID int Title nvarchar(250) Tags nvarchar(500)
Blog Tags Tbl BlogID int TagID int
در مورد کد دوم هم شاید بتوان به انباشته شدن زیاد سطرها و یا عدم ساختار مدرن اشاره کرد.
اما در postgres به راحتی میتوان این گونه دیتاها را به صورت آرایه ذخیره سازی کرد:
CREATE TABLE sal_emp ( name text, pay_by_quarter integer[], schedule text[][] );
که سبب سرچ اصولی و واکشی سریعتر اطلاعات خواهد شد.
راجع به نوع داده array در postgres در بیشتر مطالعه کنید.
راجع به نوع داده array در postgres در بیشتر مطالعه کنید.
در همین بحث دیتا تایپها میتوان به نوع text اشاره کرد که جایگزینی برای nvarchar و یا varchar میباشد. در اینجا نیازی به مشخص کردن سایز رشته نیز نیست و تمام فرآیند، به صورت خودکار در پسزمینه انجام خواهد شد. مثلا بجای nvarcahr 500 و یا MAX تنها، نوع داده را برابر text قرار میدهید.
از نظر ساختار زبانی و syntax بسیار شبیه به سایر providerها میباشد و تنها تفاوت اساسی آن، حساس بودن به حروف کوچک و بزرگ است.
سایر مزیتهای postgres را میتوانید از زبان shayro jan sky، در کانال دات نت و در ویدیو لینک شده مشاهده کنید.
مزیت بزرگ آن که باعث میشود تا از آن بتوانیم در پروژههای خود استفاده کنیم، سازگاری آن با ef core میباشد. یعنی اگر کل برنامهی شما با ef core پیاده سازی شده باشد، با عوض کردن متد UseSqlServer به UseNpgsql در کلاس program، مشکلی در برنامه رخ نخواهد داد و اپلیکیشن شما بجای استفاده از sql server به راحتی از postgres استفاده خواهد کرد.
متد نام برده شده در پکیج زیر قابل دسترسی میباشد:
کارها تماما مانند ef و حتی با کتابخانههای مربوط به آن انجام خواهد شد و تنها تغییر در کدها، همین متد UseNpgsql میباشد که provider را عوض خواهد کرد.
در قسمت بعد به نصب و راه اندازی postrgress و دشبردهای مدیریتی آن از طریق داکر و پیاده سازی CRUD خواهیم پرداخت.
سایر مزیتهای postgres را میتوانید از زبان shayro jan sky، در کانال دات نت و در ویدیو لینک شده مشاهده کنید.
مزیت بزرگ آن که باعث میشود تا از آن بتوانیم در پروژههای خود استفاده کنیم، سازگاری آن با ef core میباشد. یعنی اگر کل برنامهی شما با ef core پیاده سازی شده باشد، با عوض کردن متد UseSqlServer به UseNpgsql در کلاس program، مشکلی در برنامه رخ نخواهد داد و اپلیکیشن شما بجای استفاده از sql server به راحتی از postgres استفاده خواهد کرد.
متد نام برده شده در پکیج زیر قابل دسترسی میباشد:
Npgsql.EntityFrameworkCore.PostgreSQL
کارها تماما مانند ef و حتی با کتابخانههای مربوط به آن انجام خواهد شد و تنها تغییر در کدها، همین متد UseNpgsql میباشد که provider را عوض خواهد کرد.
در قسمت بعد به نصب و راه اندازی postrgress و دشبردهای مدیریتی آن از طریق داکر و پیاده سازی CRUD خواهیم پرداخت.