نسخه های مختلف شیرپوینت

در این قسمت خلاصه ای بر نسخه های شیرپوینت توضیح داده می شود.

نسخه پایه شیرپوینت (Microsoft SharePoint Foundation)
همانطور که از نام آن پیداست، زیرساخت تکنولوژی همه سایت های شیرپوینت است. نسخه پایه شیرپوینت برای استفاده درون سازمانی رایگان است، از نسخه پایه شیرپوینت با نام Windows SharePoint Service در نسخه های قبلی نام برده می شد. با استفاده از نسخه پایه شیرپوینت می توان به سرعت انواع سایت، لیست، کتابخانه، صفحات و... را ایجاد نمود. استفاده از نسخه پایه شیرپوینت نیازمندی های سخت افزاری و نرم افزاری متعددی دارد از جمله نیاز به یک لایسنس معتبر و مناسب برای ویندوز سروری است که شیرپوینت روی آن نصب می شود. این نسخه دارای همه قابلیتها و ویژگی های معماری هسته شیرپوینت است و نسخه های تجاری شیرپونت بر روی آن نصب می شوند. نسخه پایه شیرپوینت پس از ثبت نام در سایت مایکروسافت قابل دانلود است.

نسخه اکسپرس سرور جستجو (Microsoft Search Server Express)
این نسخه از سرور جستجوی مایکروسافت رایگان است، و یک توزیع تغییر یافته از نسخه پایه شیرپوینت است. پکیج نصب کننده آن نسخه پایه شیرپوینت را بعلاوه مجموع محدودی از قابلیت های جستجوی سازمانی و مدیریت اسناد شیرپوینت را که مخصوص نسخه های تجاری است نصب می کند.


ادامه نوشته

نسخه های مختلف شیرپوینت

در این قسمت خلاصه ای بر نسخه های شیرپوینت توضیح داده می شود.

نسخه پایه شیرپوینت (Microsoft SharePoint Foundation)
همانطور که از نام آن پیداست، زیرساخت تکنولوژی همه سایت های شیرپوینت است. نسخه پایه شیرپوینت برای استفاده درون سازمانی رایگان است، از نسخه پایه شیرپوینت با نام Windows SharePoint Service در نسخه های قبلی نام برده می شد. با استفاده از نسخه پایه شیرپوینت می توان به سرعت انواع سایت، لیست، کتابخانه، صفحات و... را ایجاد نمود. استفاده از نسخه پایه شیرپوینت نیازمندی های سخت افزاری و نرم افزاری متعددی دارد از جمله نیاز به یک لایسنس معتبر و مناسب برای ویندوز سروری است که شیرپوینت روی آن نصب می شود. این نسخه دارای همه قابلیتها و ویژگی های معماری هسته شیرپوینت است و نسخه های تجاری شیرپونت بر روی آن نصب می شوند. نسخه پایه شیرپوینت پس از ثبت نام در سایت مایکروسافت قابل دانلود است.

نسخه اکسپرس سرور جستجو (Microsoft Search Server Express)
این نسخه از سرور جستجوی مایکروسافت رایگان است، و یک توزیع تغییر یافته از نسخه پایه شیرپوینت است. پکیج نصب کننده آن نسخه پایه شیرپوینت را بعلاوه مجموع محدودی از قابلیت های جستجوی سازمانی و مدیریت اسناد شیرپوینت را که مخصوص نسخه های تجاری است نصب می کند.


ادامه نوشته

امکانات هسته شیرپوینت

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

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

وب پارت ها
وب پارت ها بخش هایی هستند که می توان آنها را به صفحات اضافه کرد. این بخش ها ظاهری ویجت گونه دارند و معمولا برای موارد ذیل استفاده می شوند:
  • نمایش محتوایی که در تنظیمات وب پارت مشخص می شود (مانند یک محتوای خاص یا یک IFrame)
  • نمایش آیتم های لیست ها یا کتابخانه ها ( این اطلاعات بوسیله SharePoint Designer و با استفاده از XSLT, CAML قابل سفارشی سازی هستند)
  • دسترسی به قابلیتهایی مانند جستجو از بستر شیرپوینت
  • ایجاد رابط کاربری برای دیگر محصولات (مانند Microsoft Reporting Services, Microsoft Office PerformancePoint Server و یا دیگر نرم افزارها)
وب پارت ها یک کد کاملا سفارشی هستند که توسط Microsoft Visual Studio ساخته می شوند و بوسیله کاربر در قالب یک پکیج بارگذاری شده و یا به صورت افزونه sandboxed نصب می شود.
بیشتر وب پارت ها امکان اتصال به دیگر وب پارت ها را دارند. این قابلیت برای ایجاد ارتباطات پیچیده در صفحات بدون نیاز به کدنویسی استفاده می شود.

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

جستجو
نسخه پایه (Foundation) شیرپوینت دارای یک موتور جستجوی محدود شده است. مایکروسافت یک محصول رایگان به نام Microsoft Search Server Express به عنوان مکمل Foundation تولید کرده است. نسخه های مختلف جستجوی شیرپوینت دارای ویژگی های متفاوتی هستند مانند توانایی جستجو درون اسنادی که از منابع خارج از شیرپوینت مانند فایل سیستم، معرفی شده اند.
 
معماری شیرپوینت
 
 
 معماری
بستر شیرپوینت بسیار انعطاف پذیر و متشکل از یک معماری سرویس گرای چند لایه است. می توان شیرپوینت را در ابعاد کوچک به گونه ای پیکربندی کرد که بر روی یک کامپیوتر نصب و راه اندازی شود. و یا بستر آن را بر روی چند صد کامپیوتر پیکربندی و راه اندازی کرد.

فارم
یک فارم شیرپوینت یک گروه منطقی متشکل از چندین سرور شیرپوینت است که منابع شان را به اشتراک گذاشته اند. یک فارم معمولا به صورت مستقل فعالیت می کند، اما در عین حال می تواند از قابلیتهای فارم دیگری استفاده کند و یا قابلیتی را برای فارم دیگری تامین نماید. هر فارم، پایگاه دادۀ تنظیمات مرکزی خودش را دارد. که از طریق یک رابط کاربری PowerShell و یا وب سایت "مدیریت مرکزی" کنترل و راهبری می شود.

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

شیرپوینت چیست؟ معرفی کامل مایکروسافت شیرپوینت

مایکروسافت شیرپوینت، یک بستر نرم افزاری تحت وب است که توسط شرکت مایکروسافت تولید و عرضه شده است. اولین نسخه از شیرپوینت در سال 2001 منتشر شد. و آخرین نسخه از آن در سال 2013 وارد بازار شده است. نسخه‌های ابتدایی شیرپوینت بیشتر برای کاربردهایی نظیر مدیریت محتوا و مدیریت اسناد مورد استفاده قرار می گرفت. اما قابلیتهای قابل توجه متعددی به نسخه های اخیر شیرپوینت اضافه شده است.
شیرپوینت شامل مجموعه‌ای از تکنولوژی‌های چند منظوره تحت وب است که بر روی یک ساختار فنی قوی قرار گرفته است. به صورت پیش فرض رابط کاربری شیرپوینت مشابه مایکروسافت آفیس است و یکپارچگی بالایی با مجموعه آفیس دارد. ابزارهای تحت وب شیرپوینت به گونه‌ای طراحی شده است که توسط کاربر غیر فنی قابل استفاده باشد. شیرپوینت بستر مناسبی برای راهکارهایی چون پورتال داخلی، مدیریت فایل ها و اسناد، تعاملات تیمی، شبکه های اجتماعی، اکسترانت، وب سایت ها، جستجوی سازمانی و هوش تجاری می‌باشد. علاوه بر این شیرپوینت قابلیت یکپارچه سازی سیستمها، یکپارچه سازی فرآیندها و اتوماسیون گردش کارها را فراهم می‌کند.
اکثر برنامه‌های کاربردی سازمانی (مانند بسته‌هاي نرم‌افزاري ERP و CRM) قابليت‌هايي را براي یکپارچه شدن با شیرپوینت ایجاد کرده‌اند. همچنین شیرپوینت مجموعه کاملی از API ها و تکنولوژی توسعه را برای برنامه‌نویسان و توسعه‌دهندگان فراهم کرده است. به عنوان یک بستر برنامه‌سازی، شیرپوینت دارای مدیریت مرکزی و کنترل‌های امنیتی لازم جهت پیاده سازی نیازمندی‌های برنامه‌ها می باشد. بستر شیرپوینت مستقیما درون وب سرور IIS قرار می‌گیرد.
شیرپوینت توسط 78درصد از 500 کمپانی لیست Fortune 500 استفاده می شود. در بین سالهای 2006 تا 2011 مایکروسافت بیش از 36.5 میلیون لایسنس کاربر شیرپوینت فروخته است.
 
کیک شیرپوینت
 
 کیک شش تکه شیرپوینت (چرخ شیرپوینت)
تیم بازاریابی شیرپوینت 2010 مایکروسافت با اصطلاح «چرخ شیرپوینت»  تسهيلاتي را که ابزارهاي شيرپوينت در درون سازمان فراهم مي‌کنند، توصیف مي‌کنند. البته اصطلاح کیک شش تکه اصطلاح جالبتری است و بیشتر در ذهن می ماند. تکه های کیک شیرپوینت چه هستند:
  • سایت‌ها: سایت یک محیط کاری موضوعي است. اولین بار که شیرپوینت پیکربندی می شود، اين سایت‌ها بدون نیاز به دانش خاصی قابل ایجاد هستند. موضوع یک سایت ممکن است کل سازمان را در بر بگيرد و یا صرفا مخصوص یک تیم یا يک گروه خاص باشد.
  • انجمن‌ها: یک انجمن مکانی است که در آن ارتباط و درک اتفاق مي‌افتد. انجمن‌ها مي‌توانند حول محور یک موضوع شکل گیرند و معمولا پيرامون دانش مشترک و يا فعاليت‌هاي مشترک، توسعه پيدا مي‌کنند.
  • محتوی: شیرپوینت امکان مدیریت اسناد و آیتم های کاری که نیاز به ذخیره سازی، جستجو، تعامل، ویرایش، مدیریت، مستندسازی، ردیابی و بازیابی دارند را بر اساس توافقات مرتبط و یا قوانین سازمان، فراهم می‌کند.
  • جستجو:  کنکاش در انجمن‌ها، محتویات، افراد و یا سایتهاي مرتبط: جستجو بر پایه کلمات کلیدی، پالایش اطلاعات و تحلیل محتوا بنا شده است.
  • بینش: اطلاعات از هر بخشي در سازمان مي‌تواند در قالب موضوعات مفيد ظاهر شود، و بدین شکل اثربخشی و کارایی اطلاعات بهبود می‌یابد.
  • ترکیبی(Composites): شیرپوینت امکان یکپارچه سازی داده ها، اسناد و فرآیندها را بدون نیاز به برنامه نویسی فراهم می‌کند. با استفاده از این قابلیت می توان برنامه های کاربردی ترکیبی ایجاد نمود.

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

انواع شمارشي در C#

در اين درس با انواع شمارشي (Enumerator Types) در زبان C# آَشنا خواهيم شد. مطالب مورد بررسي در اين درس به شرح زير مي‌باشند :

درك و فهم يك نوع شمارشي يا يك enum
ساخت يك نوع شمارشي جديد
چگونگي استفاده از انواع شمارشي
آشنايي با متدهاي مختلف موجود در System.Enum

enmu
فرم خاصي از انواع مقداري (Value Type) است كه از System.Enum مشتق شده و امكان پيمايش درون مجموعه‌اي مشخص را با استفاد از اعداد صحصيح براي ما فراهم مي‌نمايد. با استفاده از enum مي‌توان مجموعه‌اي از مقادير ثابت را تعريف نمود كه اين مقادير ثابت با استفاده از يك عدد صحيح قابل دسترسي هستند.

استفاده از enum در برنامه‌ها باعث بالا رفتن خوانايي برنامه مي‌شود، چراكه با استفاده از آنها مي‌توان با مجموعه‌اي از اعداد صحيح ترتيبي (Sequential) ، با عناويني تعريف شده، كار كرد. براي مثال، در اعلان يك enum، ما مجموعه‌اي از نامهاي مورد نظر را تعريف مي‌نماييم و در برنامه مي‌توانيم از اين نامها بصورت ترتيبي استفاده نماييم. Enum به هر يك از عناصر موجود در اين مجموعه عددي را تخصيص مي‌دهد كه شروع اين عدد مي‌تواند توسط برنامه‌نويس نيز معين گردد. سپس با استفاده از نام عناصر موجود در enum و يا با استفاده از اعدادي كه به هر يك از اين عناصر تخصيص داده شده، مي‌توان enum را پيمايش نمود و به عناصر آن دسترسي داشت.

همانطور كه گفته شد، enum يك نوع مقداري (Value Type) است، از اينرو ارث‌بري در مورد آن معنايي ندارد. مساوي قرار دادن دو enum نيز، مقادير يكي را در ديگري كپي مي‌كند. همانطور كه در اين درس، و در منابع ديگر، خواهيد يافت، دسترسي به انواع شمارشي در C# با استفاده از دو كلمه enum و Enum امكان پذير است. در C# نوع شمارشي enum از نوع BCL خود يعني Enum ارث‌بري مي‌كند ! با استفاده از enum يك نوع شمارشي جديد توليد مي‌شود و با استفاده از Enum، مي‌توان به پياده‌سازي متدهاي استاتيك انواع شمارشي پرداخت.

ايجاد يك نوع شمارشي
.Net Framework BCL
حاويenum ها و مثالهاي متعددي از استفادة آنها مي‌باشد. براي مثال هرگاه كه از MessageBox بر روي فرمي استفاده مي‌شود، مي‌توان از MessageBoxIcon كه يك نوع شمارشي است استفاده نمود.

علاوه بر انواع شمارشي تعريف شده و موجود در .Net Framework، زمانهايي نيز وجود دارند كه مي‌خواهيم مجموعه‌اي از عناصر را تعريف كرده و از آنها استفاده نماييم. براي دسترسي به عناصري از نوع صحيح، استفاده از enum باعث خوانا شدن برنامه مي‌گردد.
نحوه اعلان يك enum در حالت كلي بصورت زير است :

كد:

enum
            {
                        // Enumeration list
            {



در مثال 1-17 كه در زير ملاحظه مي‌كنيد، نحوه اعلان و استفاده از enum مشخص شده است.

مثال 1-17 : نحوه اعلان يك enum

كد:

using System;

// declares the enum
public enum Volume
{
   Low,
   Medium,
   High
}

// demonstrates how to use the enum

class EnumSwitch
{
   static void Main()
   {
      // create and initialize
      // instance of enum type
      Volume myVolume = Volume.Medium;

      // make decision based
      // on enum value
      switch (myVolume)
      {
         case Volume.Low:
            Console.WriteLine("The volume has been turned Down.");
            break;
         case Volume.Medium:
            Console.WriteLine("The volume is in the middle.");
            break;
         case Volume.High:
            Console.WriteLine("The volume has been turned up.");
            break;
      }
      Console.ReadLine();
   }
}



در مثال 1-17 نمونه‌اي از اعلان يك enum را مشاهده مي‌نماييد. همانطور كه ديده مي‌شود، اعلان يك نوع شمارشي با استفاده از كلمه كليدي enum صورت گرفته و سپس به دنبال آن نام اين مجموعه مشخص مي‌شود. درون كروشه‌هاي باز و بسته { } نيز، عناصر نوع شمارشي اعلان مي‌گردند.


ادامه نوشته

برخورد با استثناها (Exception Handling)

در اين درس با چگونگی برخورد با استثناها (يا خطاهاي غير قابل پيش‌بيني) در زبان برنامه‌سازي C# آشنا مي‌شويم. اهداف ما در اين درس بشرح زير مي‌باشد :
1)
درک و فهم صحيح يک استثناء يا Exception
2)
پياده‌سازي يک روتين براي برخورد با استثناها بوسيله بلوک try/catch
3)
آزادسازي منابع تخصيص داده شده به يک برنامه در يک بلوک finally

استثناها، در حقيقت خطاهاي غير منتظره در برنامه‌هاي ما هستند. اکثراً، مي‌توان و بايد روشهايي را جهت برخورد با خطاهای موجود در برنامه در نظر گرفت و آنها را پياده‌سازی کرد. بعنوان مثال، بررسي و تاييد داده‌های ورودی کاربران، بررسی اشياء تهی يا Null و يا بررسی نوع بازگشتی متد ها، مي‌توانند از جمله مواردی باشند که بايد مورد بررسی قرار گيرند. اين خطاها، خطاهايی معمول و رايجی هستند که اکثر برنامه‌نويسان از آنها مطلع بوده و راههايی را برای بررسی آنها در نظر مي‌گيرند تا از وقوع آنها جلوگيری نمايند.

اما زمانهايي وجود دارند که از اتفاق افتادن يک خطا در برنامه بی اطلاع هستيد و انتظار وقوع خطا در برنامه را نداريد. بعنوان مثال، هرگز نمي‌‌توان وقوع يک خطای I/O را پيش‌بينی نمود و يا کمبود حافظه برای اجرای برنامه و از کار افتادن برنامه به اين دليل. اين موارد بسيار غير منتظره و ناخواسته هستند، اما در صورت وقوع بهتر است بتوان راهی برای مقابله و برخورد با آنها پيدا کرده و با آنها برخورد نمود. در اين جاست که مسئله برخورد با استثناها (Exception Handling) مطرح مي‌شود.

هنگاميکه استثنايی رخ مي‌دهد، در اصطلاح مي‌گوئيم که اين استثناء، thrown شده است. در حقيقت thrown، شیء‌ای است مشتق شده از کلاس System.Exception که اطلاعاتی در مورد خطا يا استثناء رخ داده را نشان مي‌دهد. در قسمتهای مختلف اين درس با روش مقابله با استثناها با استفاده از بلوک های try/catch آشنا خواهيد شد.

کلاس System.Exception حاوی تعداد بسيار زيادی متد و property است که اطلاعات مهمی در مورد استثناء و خطای رخ داده را در اختيار ما قرار مي‌دهد. برای مثال، Message يکی از property های موجود در اين کلاس است که اطلاعاتی درباره نوع استثناء رخ داده در اختيار ما قرار مي‌دهد. StackTrace نيز، اطلاعاتی در مورد Stack (پشته) و محل وقوع خطا در Stack در اختيار ما قرار خواهد داد.

تشخيص چنين استثناهايی، دقيقاً با روتين‌های نوشته شده توسط برنامه‌نويس در ارتباط هستند و بستگی کامل به الگوريتمی دارد که وی برای چنين شرايطی در نظر گرفته است. برای مثال، در صورتيکه با استفاده از متد System.IO.File.OpenRead()، اقدام به باز کردن فايلی نماييم، احتمال وقوع (Thrown) يکی از استثناهای زير وجود دارد :

كد:

SecurityException
ArgumentException
ArgumentNullException
PathTooLongException
DirectoryNotFoundException
UnauthorizedAccessException
FileNotFoundException
NotSupportedException



با نگاهی بر مستندات .Net Framework SDK، به سادگی مي‌توان از خطاها و استثناهايی که ممکن است يک متد ايجاد کند، مطلع شد. تنها کافيست به قسمت Reference/Class Library رفته و مستندات مربوط به Namespace/Class/Method را مطالعه نماييد. در اين مستندات هر خطا دارای لينکی به کلاس تعريف کننده خود است که با استفاده از آن مي‌توان متوجه شد که اين استثناء به چه موضوعی مربوط است. پس از اينکه از امکان وقوع خطايي در قسمتی از برنامه مطلع شديد، لازم است تا با استفاده از مکانيزمی صحيح به مقابله با آن بپردازيد.

هنگاميکه يک استثناء در اصطلاح thrown مي‌شود (يا اتفاق مي‌افتد) بايد بتوان به طريقی با آن مقابله نمود. با استفاده از بلوکهای try/catch مي‌توان چنين عملی را انجام داد. پياده‌سازی اين بلوکها بدين شکل هستند که، کدی را که احتمال توليد استثناء در آن وجود دارد را در بلوک try، و کد مربوط به مقابله با اين استثناء رخ داده را در بلوک catch قرار مي‌دهيم. در مثال 1-15 چگونگی پياده‌سازی يک بلوک try/catch نشان داده شده است. بدليل اينکه متد OpenRead() احتمال ايجاد يکی از استثناهای گفته شده در بالا را دارد، آنرا در بلوک try قرار داده ايم. در صورتيکه اين خطا رخ دهد، با آن در بلوک catch مقابله خواهيم کرد. در مثال 1-15 در صورت بروز استثناء، پيغامی در مورد استثناء رخ داده و اطلاعاتی در مورد محل وقوع آن در Stack برای کاربر بر روی کنسول نمايش داده مي‌شود.

نکته : توجه نماييد که کليه مثالهای موجود در اين درس به طور تعمدی دارای خطاهايی هستند تا شما با نحوه مقابله با استثناها آشنا شويد

ادامه نوشته

رخدادها و delegate ها در C#    - قسمت دوم

اعلان Delegate
در مثال ما، متد Tick از واسط Tickable از نوع void بود و هيچ پارامتري دريافت نمي‌كرد :

كد:

interface Tickable
{
    void Tick();
}

براي اين متد مي‌توان delegate ي تعريف نمود كه ويژگيهاي آنرا داشته باشد :

كد:

delegate void Tick();



همانطور كه قبلاً نيز گفته شد، اين عمل نوع جديدي را ايجاد مي‌نمايد كه مي‌توان از آن همانند ساير انواع استفاده نمود. مثلاً مي‌توان آنرا بعنوان پارامتري براي يك متد در نظر گرفت :

كد:

void Example(Tick param)
{
   

}



فراخواني delegate
قدرت و توانايي delegate زماني مشهود مي‌گردد كه مي‌خواهيد از آن استفاده نماييد. براي مثال، با متغير param در مثال قبل چكار مي‌توانيد انجام دهيد؟ اگر param متغيري از نوع int بود، از مقدار آن استفاده مي‌كرديد و با استفاده از عملگرهايي نظير +، - و يا عملگرهاي مقايسه‌اي، عملي خاص را بر روي آن انجام مي‌داديد. اما حال كه param متغيري از نوع int نيست، چه مي‌كنيد؟ متغير param يك delegate است و همانطور كه گفته شد، delegate انتزاعي از يك متد است، پس هر عملي كه متد انجام مي‌دهد، delegate نيز مي‌تواند انجام دهد. با استفاده از پرانتز، مي‌توان از delegate استفاده نمود :

كد:

void Example(Tick param)
{
    param();
}

نكته : همانطور كه اشاره شد، delegate يكي از انواع مرجعي است از اينرو مقدار آن مي‌تواند برابر با Null باشد. در مثال فوق، اگر مقدار param برابر با Null باشد، كامپايلر خطاي NullReferenceException را ايجاد مي‌نمايد.

همانند متدها، delegate ها بايد بطور كامل و صحيح فراخواني گردند. با توجه به اعلان Tick، در زمان فراخواني اين delegate، مثلاً param، بايد توجه داشت كه هيچ پارامتري را نمي‌توان به آن ارسال نمود و نمي‌توان آنرا به متغيري نسبت داد چراكه اين delegate بصورت void اعلان شده و مقدار بازگشتي ندارد.

كد:

void Example(Tick param)
{
    param(42);                  // خطاي زمان كامپايل رخ مي‌دهد
    int hhg = param();          // خطاي زمان كامپايل رخ مي‌دهد
    Console.WriteLine(param()); // خطاي زمان كامپايل رخ مي‌دهد
}

توجه نماييد كه delegate را به هر نحوي مي‌توانيد اعلان نماييد. براي مثال به نسخة ديگري از Tick توجه كنيد :

كد:

delegate void Tick(int hours, int minutes, int seconds);



اما به ياد داشته باشيد كه همانند متد، در هنگام استفاده از آن بايد پارامترهاي صحيح به آن ارسال نماييد :

كد:

void Example(Tick method)
{
    method(12, 29, 59);
}


با استفاده از delegate مي‌توانيد كلاس Ticker را پياده‌سازي كنيد :

كد:

delegate void Tick(int hours, int minutes, int seconds);
class Ticker
{
   

    public void Attach(Tick newSubscriber)
    {
        subscribers.Add(newSubscriber);
    }
    public void Detach(Tick exSubscriber)
    {
        subscribers.Remove(exSubscriber);
    }
 
    private void Notify(int hours, int minutes, int seconds)
    {
        foreach (Tick method in subscribers)
        {
            method(hours, minutes, seconds);
        }
    }
   

    private ArrayList subscribers = new ArrayList();
}

ساخت نمونه‌هاي جديد از يك delegate
آخرين كاري كه بايد انجام دهيد، ايجاد نمونه‌هاي جديد از delegate ساخته شده است. يك نمونة جديد از يك delegate، تنها انتزاعي از يك متد است كه با نامگذاري آن متد ايجاد مي‌شود.

 

ادامه نوشته

رخدادها و delegate ها در C#    - قسمت اول

نكته مهم قبل از مطالعه اين درس
توجه نماييد، delegate ها و رخدادها بسيار با يكديگر در تعامل‌اند، از اينرو در برخي موارد، قبل از آموزش و بررسي رخدادها، به ناچار، از آنها نيز استفاده شده و يا به آنها رجوع شده است. رخدادها در قسمت انتهايي اين درس مورد بررسي قرار مي‌گيرند، از اينرو در صورتيكه در برخي موارد دچار مشكل شديد و يا درك مطلب برايتان دشوار بود، ابتدا كل درس را تا انتها مطالعه نماييد و سپس در بار دوم با ديدي جديد به مطالب و مفاهيم موجود در آن نگاه كنيد. در اغلب كتابهاي آموزشي زبان C# نيز ايندو مفهوم با يكديگر آورده شده‌اند ولي درك رخدادها مستلزم درك و فراگيري كامل delegate هاست، از اينرو مطالب مربوط به delegate ها را در ابتدا قرار داده‌ام.

هدف ما در اين درس به شرح زير است :
مقدمه
درك اينكه يك delegate چيست؟
اعلان و پياده‌سازي delegate ها
درك سودمندي delegate ها
حل مسئله بدون استفاده از delegate
حل مسئله با استفاده از delegate
اعلان delegate ها (بخش پيشرفته)
فراخواني delegate ها (بخش پيشرفته)
ايجاد نمونه‌هاي جديد از يك delegate (بخش پيشرفته)
درك اينكه يك رخداد يا يك event چيست؟
اعلان رخدادها
نكات و توضيحات پيشرفته
ثبت شدن در يك رخداد
لغو عضويت در يك رخداد
فراخواني رخدادها
مثالي پيشرفته از استفاده رخدادها در فرمهاي ويندوز
نكات كليدي درباره رخدادها و delegate ها
منابع مورد استفاده
مقدمه‌اي بر رخداد‌ها و
delegate ها
در گذشته، پس از اجراي يك برنامه، برنامه مراحل اجراي خود را مرحله به مرحله اجرا مي‌نمود تا به پايان برسد. در صورتيكه نياز به ارتباط و تراكنش با كاربر نيز وجود داشت، اين امر محدود و بسيار كنترل شده صورت مي‌گرفت و معمولاً ارتباط كاربر با برنامه تنها پر كردن و يا وارد كردن اطلاعات خاصي در فيلدهايي مشخص بود.

امروزه با پبشرفت كامپيوتر و گسترش تكنولوژيهاي برنامه نويسي و با ظهور رابطهاي كاربر گرافيكي (GUI) ارتباط بين كاربر و برنامه بسيار گسترش يافته و ديگر اين ارتباط محدود به پر كردن يكسري فيلد نيست، بلكه انواع عمليات از سوي كاربر قابل انجام است. انتخاب گزينه‌اي خاص در يك منو، كليك كردن بر روي دكمه‌ها براي انجام عملياتي خاص و ... . رهيافتي كه امروزه در برنامه‌نويسي مورد استفاده است، تحت عنوان "برنامه‌نويسي بر پايه رخدادها" (Event-Based Programming) شناخته مي‌شود. در اين رهيافت برنامه همواره منتظر انجام عملي از سوي كاربر مي‌ماند و پس از انجام عملي خاص، رخداد مربوط به آن را اجرا مي‌نمايد. هر عمل كاربر باعث اجراي رخدادي مي‌شود. در اين ميان برخي از رخدادها بدون انجام عملي خاص از سوي كاربر اجرا مي‌شوند، همانند رخدادهاي مربوط به ساعت سيستم كه مرتباً در حال اجرا هستند.

رخدادها (Events) بيان اين مفهوم هستند كه در صورت اتفاق افتادن عملي در برنامه، كاري بايد صورت گيرد. در زبان C# مفاهيم Event و Delegate دو مفهوم بسيار وابسته به يكديگر هستند و با يكديگر در تعامل مي‌باشند. براي مثال، مواجهه با رخدادها و انجام عمل مورد نظر در هنگام اتفاق افتادن يك رخداد، نياز به يك event handler دارد تا در زمان بروز رخداد، بتوان به آن مراجعه نمود. Event handler ها در C# معمولاً با delegate ها ساخته مي‌شوند.

از delegate ، مي‌توان به عنوان يك Callback ياد نمود، بدين معنا كه يك كلاس مي‌تواند به كلاسي ديگر بگويد : "اين عمل خاص را انجام بده و هنگاميكه عمليات را انجام دادي منرا نيز مطلع كن". با استفاده از delegate ها، همچنين مي‌توان متدهايي تعريف نمود كه تنها در زمان اجرا قابل دسترسي باشند.

ادامه نوشته

₪ آموزش نکات کاربردی ASP.NET MVC 4 (قسمت اول)   

نکته اول: MVC چیست؟در این مورد سخن زیاد گفته شده؛ به طور خلاصه: MVC (مخفف Model-View-Controler) الگوی نوینی از پروژه های ASP.NET است که در آن، بخش های مختلف یک اپلیکشن به خوبی و با یک استاندارد ویژه ساماندهی شده است. همچنین MVC از نسخه 3 به بعد با دستور زبان (syntax) جدید به نام Razer همراه شد که مزایای فراوانی دارد.
برای درک معماری MVC شکل ذیل را ببینید:

همان گونه که شکل می گوید: در معماری MVC کاربر آدرسی (URL) را وارد می کند؛ این تقاضا به یک متد در داخل یک کلاس کنترلر فرستاده می شود (در روش معمول، URL ها به یک فایل html, aspx, php و غیره هدایت شده و سرور آن فایل را پردازش کرده نتیجه را بر می گرداند). سپس کنترلر به کلاس های مدل مراجعه می کند؛ مدل، داده های مورد نیاز را از منبع داده خوانده و به کنترلر تحویل می دهد (یا داده ها را در منبع داده نوشته و نتیجه را بر می گرداند). آنگاه کنترلر، ویو متناسب را به کاربر برمی گرداند.


مرجع:http://www.fekrenaw.com

ادامه نوشته