کوئری با تاخیر
بسم الله الرحمن الرحیم
آموزش لینک
در بخش های آموزش Linq در مورد کوئری های با تاخیر به صورت مختصر صحبت شد اما برای درک بهتر نیاز دیدم تا یک مثال را بررسی کنیم تا در صورتی که مطلب کاملا روشن نشده است در اینجا به طور کامل مشخص گردد.
این مثال در نظر بگیرید:
int[] price = new int{6500,5000,7800,9000,4800};
var result= price.Order().Take(3);
price[5]=999999;
foreach(var p in result)
{
Console.WriteLine(p);
}
ادامه مطلب...
قرارداد های MVC
بسم الله الرحمن الرحیم
آموزش ASP.NET MVC
ما در MVC دو نوع قرارداد داریم در نوع اول قرارداد ها اختیاری هستند مثل قراردادن فایلهای تصاویر و.. در پوشه content، در صورتی که اینکار را انجام ندهید هیچ مشکل پیش نخواهد آمد. قرارداد های نوع دوم که به Convention Over Configuration معروف هستند، به این معنی که قرارداد بر پیکربندی ارجحیت دارد در این نوع قرارداد هاکه باعث راحتی کاربر می شود و این روش از Ruby and Rails گرفته شده است؛ شما نیازی ندارید که ارتباط بین کنترلر و View را مشخص نمایید.
کلاس کنترلر با کلمه Controller ختم می شود و route ها یا HTML Helper ها فقط تا قبل از کلمه Controller اسم را می خوانند. Viewها و partial viewها باید در پوشه ای با نام کنترلر خود قرار گیرند، البته باز هم نام کنترلر بدون قسمت Controller آن. نام اکشن ها باید همان نام View ها باشد.
نیاز به ذکر پسوند فایل های View نیست خود موتور مورد استفاده می تواند تشخیص دهد که باید به دنبال چه پسوندی بگردد.(Razor بدنبال cshtml و aspx به دنبال aspx). در زمان جستجو View ها ابتدا بدنبال view های قرار گرفته در پوشه هم نام با کنترلر و سپس در پوشه Shared، بدین معنا که باید viewهایی که چند جا فراخوانی می شوند را دراین پوشه قرار دهید.
برای نام گذاری قالب ها باید نام آن را با کاراکتر underline، "_" شروع کنید و سپس در پوشه Shared قرار دهید. اگر viewایی قالب نداشته باشد به صورت پیش فرض قالب _Layout.cshtml به تمام view ها اعمال می شود این فرایند از طریق فراخوانی در فایل view/_viewStart.cshtml اعمال می شود. اگر می خواهید قالب خودتان را اعمال کنید کافی است دستور زیر را در فایل Layout.cshtml_ بنویسید:
@
{
Layout = “~/Views/Shared/MyLayout.cshtml”;
}
قابلیت Edit and Continue
بسم الله الرحمن الرحیم
آموزش برنامه نویسی
یک قابلیت مناسب وجود دارد برای خطایابی برنامه ها در VS که شاید بعضی دوستان از این قابلیت استفاده نکنند به همین دلیل سعی کردم به صورت کوتاه آن را بیان کنم البته به همکاران انشالله بر نمی خورد شاید کسانی باشند خارج از مجموعه و بخواهند از مطالب استفاده کنند.
این قابلیت اجازه می دهد تا در صورت بر خورد با خطایی آن خطا در مرحله debug بررسی و برطرف و به اجرای برنامه ادامه دهید. برای فعال سازی این قابلیت کافی است از منوی tools گزینه option وسپس در بخش سمت چپ گزینه debugging گزینه edit and continue enable را فعال کنید و سپس ok را بزنید. حال از منوی project گزینه properties را انتخاب نمایید سپس در پنجره باز شد در بخش سمت چپ گزینه web و در نهایت edit and continue enable را فعال کنید.
فقط این قابلیت در همه جا قابل استفاده نیست مثلا در مواردی که از متغییر های نوع dynamic مثل viewbag استفاده می کنید.
آموزش وب سرویس
بسم الله الرحمن الرحیم
آموزش وب سرویس
از آنجایی که مطالبی در خصوص WCF و Web Api را در سایت قرار دادم لازم دیدن تا روش های قبلی را نیز کامل کنم به همین دلیل در اینجا آموزشی قرار دادم تا انشالله با مباحث ابتدایی آشناییت پیدا شود در ضمن این مطلب را بیشتر برای دوستان تیم وب قرار دادم که با معماری سرویس گرا فعالیت می کنند.
Visual Studio همانند ساختن یک Page به شما اجازه می دهد تا یک سرویس که طبیعتا مبتنی بر Asp.Net XML است ایجاد کنید. همچنین شما می توانید از یک وب سرویس که در کامپیوتر شما یا در UDDI که بیرون از سیستم شما قرار دارد استفاده کنید. اگر فرصت شد انشالله مطلبی در خصوص UDDI نیز در سایت قرار خواهم داد. اما در حد مختصر فولدر سرویس که مکانی است که businesses می توانند در آن ثبت و جستجو را می تواند برای وب سرویس انجام دهد گویند و UDDI مخفف Universal Description, Discovery and Integration می باشد یعنی توصیف کلی، اکتشاف و یکپارچگی؛ حالا.
برای این آموزش نیاز به IIS دارید اگر تا کنون از این سرور استفاده نکردید نگران نباشید کافی است آن را از قسمت Add\Remove به صورت کامل فقط فعال کنید.
ادامه مطلب...آموزش Linq (بخش هشتم)
بسم الله الرحمن الرحیم
مشاهده تمامی آموزش های دوره LINQ
آموزش LINQ
بخش هشتم
LINQ
در این بخش تگ های تبدیل لینک را آموزش خواهم داد
Conversion Operators
cast
عناصر مجموعه را به یک نوع مشخص تبدیل می کند
ArrayList list = new ArrayList { 1, 3, 2, 3, 1, 8, 13 };
IEnumerable<int> query = list.Cast<int>();
foreach (int i in query)
Console.WriteLine(i);
//output
//1
//3
//2
//3
//3
//1
//8
//13
ادامه مطلب...
آموزش Linq (بخش هفتم)
بسم الله الرحمن الرحیم
مشاهده تمامی آموزش های دوره LINQ
آموزش LINQ
بخش هفتم
LINQ
در این بخش تگ های اتصال لینک را آموزش خواهم داد
Join operators
join
برای متصل کردن دو شی یه یکدیگر از متد join استفاده می کنیم. مثال:
var query = from c in customers join o in orders on c.CustomerID equals o.CustomerID
select new {FullName = c.Name + " " +
c.Family ,
c.CustomerID ,
o.OrderDate ,
TotalOrder = o.Total
};
ادامه مطلب...
آموزش Linq (بخش ششم)
بسم الله الرحمن الرحیم
مشاهده تمامی آموزش های دوره LINQ
آموزش LINQ
بخش ششم
LINQ
در این بخش تگ های انتخابی لینک را آموزش خواهم داد
Element opertators
ElementAt
عنصر واقع در یک اندیس مشخص شده در یک مجموعه را برمی گرداند.
var query = SampleList.ElementAt(4);
ElementAtOrDefault
عنصر واقع در یک اندیس مشخص در یک مجموعه را برمی گرداند و یا اگر اندیس خارج از دامنه باشد یک مقدار پیش فرض را برمی گرداند.
ادامه مطلب...آموزش Linq (بخش پنجم)
بسم الله الرحمن الرحیم
مشاهده تمامی آموزش های دوره LINQ
آموزش LINQ
بخش پنجم
LINQ
در این بخش تگ های تولیدی لینک را آموزش خواهم داد
Generation Empty
Range
مجموعه ای را تولید می کند که حاوی دنباله ای از اعداد است مثال:
// Generate a sequence of integers from 1 to 10
// and then select their squares.
IEnumerable squares = Enumerable.Range(1, 10).Select(x => x * x);
foreach (int num in squares)
Console.WriteLine(num);
/*
This code produces the following output:
1
4
9
16
25
36
49
64
81
100
*/
ادامه مطلب...
آموزش Linq (بخش چهارم)
بسم الله الرحمن الرحیم
مشاهده تمامی آموزش های دوره LINQ
آموزش LINQ
بخش چهارم
LINQ
در این بخش عملگرهای کمیت سنج و عملگر های دسته بندی را معرفی خواهم کرد
Quantifier
All
تمام عناصر یک مجموعه را بررسی و در صورت صحیح بودن شرط برای همه مقادیر، مقدار true بر می گرداند.
List<int> SampleList1 = new List<int>() { 1, 3, 2, 3, 1, 8, 13 };
bool query = SampleList1.All( c => ((c % 2) == 0));
Console.WriteLine(query);
//output
//False
ادامه مطلب...
آموزش Linq (بخش سوم)
بسم الله الرحمن الرحیم
مشاهده تمامی آموزش های دوره LINQ
آموزش LINQ
بخش سوم
LINQ
در این بخش تگ های دسته بندی لینک را آموزش خواهم داد
Group By
در بعضی پرس و جو ها شما نیاز دارید که نتیجه را به صورت گروه بندی نمایش دهید برای گروه بندی باید به صورت زیر عمل کنید:
var queryCustomersByCity = from cust in customers group cust by cust.City;
یا
var query = from c in customers group c by c.Country into cc select new { Country = cc.Key };
فکر کنم نیازی به توضیح نیست با استفاده از متغییر دامنه ما تعیین می کنیم که بر اساس چه فیلدی گروه بندی شود در اینجا ما بر اساس شی مشتری که فیلد شهر را دارد گروه بندی می کنیم.
اگر بخواهیم به نتیجه گروه بندی دسترسی داشته باشیم باید از عبارتinto استفاده کنیم. مثال:
var custQuery = from cust in customers group cust by cust.City into custGroup where custGroup.Count() >2 orderby custGroup.Key select custGroup;
ادامه مطلب...
توابع توسعه
بسم الله الرحمن الرحیم
بسم الله الرحمن الرحیم
مشاهده تمامی آموزش های دوره LINQ
آموزش LINQ
در بعضی مواقع ممکن است شما کلاسی را داشته باشید که نتوانید از آن ارث ببرید و یا تغییری در آن ایجاد کنید راه حل چیست؟
راه حل استفاده از توابع توسعه است در تعریف این توابع باید اولا static باشند و دوما اولین پارامتر ورودی با کلمه کلیدی this شروع شود (فقط اولین پارامتر) مثال:
static class MyExtensionMethodes
{
public static string PrintString(this int input)
{
return input.ToString();
}
}
برای روشن تر شدن مطلب یک مثال را بررسی خواهیم کرد فکر کنید که یک کلاس با نام Car داریم و این کلاس را اجازه دسترسی به آن نداریم به عبارتی نمی توانیم ان را تغییر دهیم کلاس ما به صورت زیر تعریف شده است
public class car
{
public void PrintName(String name)
{
MessageBox.Show(name);
}
}
ادامه مطلب...
آموزش Lambda
بسم الله الرحمن الرحیم
بسم الله الرحمن الرحیم
مشاهده تمامی آموزش های دوره LINQ
آموزش LINQ
در این بخش قصد دارم به معرفی عبارات لامبدا بپردازم انشالله که مفید واقع گردد.
در حالت عادی ما یک تابع را به صورت زیر تعریف می کنیم
public void Load(object parameter)
{
.....
}
این تابع دارای بخش های زیر است:
- میدان دید تابع public
- خروجی تابع void
- نام تابع load
- پارامتر ورودی تابع parameter
- بدنه تابع
حال در تابع هایی که به وسیله عبارت لامبدا تعریف می شوند بخش های زیر فقط وجود دارد:
- پارامترها
- بدنه تابع
(int x) => x + 1;
ادامه مطلب...
آموزش Linq (بخش دوم)
بسم الله الرحمن الرحیم
مشاهده تمامی آموزش های دوره LINQ
آموزش LINQ
بخش دوم
LINQ
در این بخش عملگرهای استاندارد و اصلی لینک به همراه توابع تجمعی را آموزش خواهم داد.
منباب اطلاع: شما با استفاده از لینک می توانید بر روی نوع های جنریک های مختلف کوئری بزنید مثال:
IEnumerable<Customer> customerQuery = from cust in customers where cust.City == "London" select cust;
foreach (Customer customer in customerQuery)
{
Console.WriteLine(customer.LastName + ", " + customer.FirstName);
}
بحثی در لینک وجود دارد به نام اجرای با تعویق، در واقع به این معنی است که هنگامی که شما یک دستور لنیک را می نویسید آن را فقط ایجاد می کنید و وقتی آن را با foreach می خوانید در آن زمان اجرا می کنید. متغییر پرس وجو هرگز نتایج را نگهداری نمی کند یعنی اگر شما یک دستور را بر روی پایگاه داده اجرا کنید و پایگاه داده دائما تغییر کند نتایج شما هم به ازای هر بار اجرا شدن (منظور از اجرا شدن مثلا همان دستور foreach است) نتایج متفاوتی خواهد داشت.
بعضی دستورات لینک صریحا اجرا می شوند مثل First و Average ،Max ،Count چون باید اجرا شوند تا بتوانند نتیجه را مشخص کنند و این نوع دستورات یک مقدار بر می گرداند به این عملگر ها، عملگرهای تجمعی می گویند.
ادامه مطلب...آموزش Linq (بخش اول)
بسم الله الرحمن الرحیم
مشاهده تمامی آموزش های دوره LINQ
آموزش LINQ
بخش اول
LINQ
در این بخش قصد دارم به معرفی LINQ بپردازم و آن را به صورت مختصر و درحین حال کامل آموزش دهم
همان طور که می دانید شما برای گرفتن کوئری و به عبارتی پرس و جو بر روی منبع های مختلف مثل XML,SQL و ... نیاز به آموزش زبان های مختلف دارید که مشکل بسیار بزرگی است راه حل ارائه گردیده استفاده از زبانی است که از همه این منبع ها پشتیبانی نماید. لینک در VS2008 و .Net 3.5 ارائه گردید و linq مخفف عبارت Language Integrated Query است.
برای تئوری همین کافی است.
لطفا از این پس LINQ را لینک تلفظ نمایید.
در اجرای دستورات لینک سه بخش مورد استفاده است:
- منبع داده
- پرس و جو
- اجرا
مثال:
int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };
var numQuery = from num in numbers where (num % (0 == 2 select num;
foreach (int num in numQuery)
{
Console.Write("{0,1} ", num);
}
ادامه مطلب...
معرفی برخی از ابزارهای ALT.Net
بسم الله الرحمن الرحیم
آموزش ابزارهای ALT.Net
این مطلب را برای دوستان تیم طراحی و تست قرار دادم انشالله مفید واقع شود
معرفی برخی از ابزارهای ALT.Net
به ابزارهایی که جهت افزایش کیفیت و ابداع روش های جدید جهت افزایش بهره وری کار تولید می شوند را ALT.NET می گویند.
ابزارهایی که بسیار در تولید و توسعه نرم افزار کارا خواهند بود را معرفی کرده ام و البته در هر مورد چند نمونه ذکر کردم اما مطما تنها کافی است که بهترین را از دیدگاه خود و نیاز های خود انتخاب کنید و در طراحی خود از آن بهره ببرید من شخصا از هر مجموعه تنها یک ابزار را انتخاب و با آن کار می کنم اما بدلایلی چون شاید انتخاب من انتخاب مناسبی برای شما نباشد از مشخص نمودن ابزارهایی که از آنها استفاده می کنم خود داری کرده ام و انتخاب را به عهده خودتان قرار داده ام البته شاید با توجه کردن به مطالب آموزش داده شده در این وبلاگ به انتخاب من نیز پی ببرید:
برنامه های آزمایش واحد
NUnit
xNUnit
فریمورک های Mock
Moq
Rhino Mocks
فریمورک های واگذاری مسئولیت (inversion of control)
Ninject
Autofac
ابزارهای کنترل یکپارچه گیفیت نرم افزار که با عنوانContinuous Integration شناخته می شوند
Cruise Control
Team City
ابزارهای ORM
NHibernate
Subsonic
Entity Framework
توسعه تست محور
بسم الله الرحمن الرحیم
آموزش TDD - توسعه تست محور
این مطلب را برای دوستان تیم طراحی و تست قرار دادم انشالله مفید واقع شود.
توسعه تست محور
برای تست نرم افزار روش های متعددی وجود دارد، من شخصا در پروژه ها از روش Test Driven Development (TDD) یا به عبارتی توسعه تست محور استفاده می کنم این روش در واقع از تفکر Agile منشات می گیرد.
متاسفانه روش TDD و ابزار های موجود در این روش به خوبی با Asp.net Web Form سازگار نیست و ولی باز می توان از این روش استفاده کرد.
دو نوع از این ابزار ها را معرفی خواهم کرد:
ابزار های آزمایش واحد (Unit testing tools)
همانطور که از نام آن مشخص است اجازه می دهد تا کلاس ها، متدها و بخش های مختلف نرم افزار را به صورت جدا بررسی کنید.
اما نکته ای که وجود دارد این است که باید لایه های نرم افزار از هم جدا باشند و در واقع وابستگی به صورت صحیح باشد مبحث وابسگی را قبلا توضیح دادم در صورتی که در این زمینه اطلاعی ندارید مبحث تزریق وابستکی و سایر مباحث Design Pattern را مطالعه نمایید تا بتوانید از این ابزار استفاده نمایید.
متاسفانه بسیاری از دوستان در طراحی نرم افزار به گونه ای عمل می کنند که نرم افزار را نمی توان به صورت بخش های جدا تقسیم و تست نمود که این باعث مشکلات زیادی خواهد شد.
مخصوصا Asp.net Web Form کار ها به دلیل ماهیت خود این تکنولوژی ساختار را به گونه ای تعریف می کنند که بیشتر مواقع منطق را در Event ها قرار می دهند! به هر حال.
ابزار های خودکار سازی محیط
در واقع این نرم افزارها رفتار کاربر را برای کار با نرم افزار شما شبیه سازی می کنند از این نرم افزار ها نیز می توانید در تکنولوژی های مختلف استفاده کنید ولی به محض تغییر ساختار برنامه یا هر رخداد دیگری که باعث شود در شناسایی نرم افزار تغییری ایجاد شود باید مجددا ساختار جدید را معرفی نمایید.
روش BDD) Behavior Driven Design) یا به عبارتی توسعه رفتار محور آخرین روش موجود برای تست نرم افزار است که این روش نیز زیر مجموعه تفکر Agile است.
پیکربندی Database Mail وارسال ایمیل از طریق Database Mail
بسم الله الرحمن الرحیم
آموزش DataBase Mail
پیکربندی Database Mail وارسال ایمیل از طریق Database Mail
در این مقاله قصد داریم یک Database Mail راه اندازی کنیم و بهتر است دوستانی که باDatabase Mail آشنایی ندارند ابتدا معرفی و تفاوت آن را با SQLMail که قبلا در مورد آن مطلبی را قرار داده ام بررسی کنند.
برای شروع کار ابتدا باید Database Mail را پیکر بندی کنیم، در این مرحله ابتدا یک profile ایجاد می کنیم
ابتدا SSMS (اسکیوال سرور) را باز می کنیم در بخش سمت چپ Object Explorer بر روی Management کلیک می کنیم و از گزینه های زیر مجموعه آن بر روی Database Mail کلیک راست می کنیم و گزینه Configuration Database Mail را انتخاب می کنیم
ادامه مطلب...تفاوت بین SQLMAIL و Database Mail
بسم الله الرحمن الرحیم
این مبحث را برای دوستان تیم طراحی پایگاه داده قرار دادم انشالله مفید واقع شود
تا کنون کسی را ندیده ام که اولا تفاوت این دو را بداند (در بحث های انجام شده در تمامی سایت هایی که بررسی کرده ام؛ هیچ بحثی در این مورد وجود ندارد!) و دوما هیچ کس از این روش برای ارسال ایمیل استفاده نمی کند مجددا در هیچ مطلب فارسی این مبحث مطرح نشده است به همین دلیل این مطلب را قرار داده تا شاید دوستان خارج از مجموعه با مباحث این چنینی بیشتر آشنا شوند
Database mail یک مفهوم جدید است که در SQL Server 2005 مطرح شد و جایگزین SQLMail در نسخه های قبل تر Sql گردید
Database Mail چندین مزیت و پیشرفت بر SQLMail دارد. Database Mail بر اساس SMTP (Simple Mail Transfer Protocol) و همچنین خیلی سریعتر و قابل اعتماد تر از SQLMail است و SQLMail بر اساس MAPI (Messaging Application Programming Interface) است.
ادامه مطلب...تزریق وابستگی و DDD
بسم الله الرحمن الرحیم
آموزش تزریق وابستگی
با توجه به اینکه چندین مطلب در مورد DI قرار دادم اما با توجه به مطلبی با عنوان معرفی متدولوژی DDD که برای دوستان قرار دادم و مثالی را در آن مطرح کردم و تصمیم گرفتم چند نکته جدید در بحث DI را در ادامه مثال مطلب DDD خدمتتان عرض کنم
همه با DI آشنا هستیم (در صورت عدم آشنایی لطفا مطالب قبلی را مطالعه نمایید) در مثال مطرح شده در مطلب DDD کدی به صورت زیر داشتید (پیشنهاد می کنم مطلب مربوطه را با عنوان معرفی متدولوژی Domain Driven Design برای درک هر چه بهتر این مطلب مطالعه فرمایید هر چند در صورت عدم مطالعه آن بحث زیر را متوجه خواهید شد) :
public class Account
{
public int Id { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
}
public class People
{
public Account account { get; set; }
public int Id { get; set; }
public string FullName { get; set; }
public string NationalCode { get; set; }
}
public class Report
{
public People people { get; set; }
public int Id { get; set; }
public string Text { get; set; }
public DateTime RegisterDate{ get; set; }
}
ادامه مطلب...
معرفی WCF
بسم الله الرحمن الرحیم
آموزش WCF
در این بخش مطلبی را جهت کار با WCF قرار خواهیم داد تا انشالله تمامی دوستان با این مبحث آشنا شوند.
WCF چیست؟
WCF ترکیبی از ویژگی های Web Service, Remoting, MSMQ ،COM+ است. WCF یک پلتفرم مشترک جهت برقراری ارتباط برای تمامی تکنولوژی های Net. است، که در واقع قسمتی از Net 3. است.
تفاوت بین WCF و Web service
در web service ما باید به کلاس خاصیت [WebService] را اضافه کنیم.
در WCF ما باید به کلاس خاصیت [ServiceContract] را اضافه کنیم.
در وب سرویس ما WebMethod را به متد اضافه می کنیم.
در WCF ما OperationContract را به متد اضافه می کنیم.
برای serialization در وب سرویس از System.Xml.serialization استفاده می کنیم.
برای serialization در WCF از System.Runtime.Serialization استفاده می کنیم.
ما می توانیم یک وب سرویس را در IIS هاست کنیم.
ما می توانیم یک WCF را در WAS (Windows Activation Service), self-hosting ,Windows Service ,IIS هاست کنیم.
ساخت یک پروژه WCF
مسیر زیر را جهت ساخت یک پروژه طی کنید:
Start Menu >> All Programs >> Microsoft Visual Studio 2010 >> Microsoft Visual Studio 2010
File >>New >> Project
نوع پروژه را NET Framework 4. و گزینه WCF Service Application را از لیست WCF انتخاب می کنیم.
در پروژه جدید ایجاد شده در قسمت Solution Explorer شما باید فایل های Service1.svc و IService1.cs را مشاهده نمایید.
فایل IService1.cs را باز کنید.
شما در این فایل کدهای ServiceContract, OperationContract , DataContract را مشاهده می کنید.
Service Contract
Service Contract خاصیتی است که بر روی interface اعمال می شود و تعیین می کند که کلاینت چه فعالیتهایی را روی سرویس می تواند انجام دهد.
Operation Contract
Operation Contract خاصیتی است که بر روی متدهای یک اینترفیس تاثیر می گذارد و معین می کند که چه متدهایی در اختیار قرار خواهد گرفت.
Data Contract
Data Contract تعیین می کند که چه data types از طریق سرویس انتقال داده می شوند Data Contract برای تعریف کلاس استفاده می شود و DataMember برای تعریف Properties ها استفاده می شود.
ادامه دارد...