ذخیره تنظیمات یک برنامه دسکتاپ در دات نت

در اکثر برنامه های دسکتاپ، قسمتی به عنوان تنظیمات (Settings، Options یا Preferences) در نظر گرفته می شود تا کاربران امکان تنظیم اجزای مختلف برنامه را بر اساس سلیقه یا نیاز خود داشته باشند. در دات نت فریم ورک قابلیتی به نام Settings وجود دارد که شما با استفاده از آن می توانید تنظیمات برنامه خود را در یک فایل به نام App.config در کنار برنامه خود ذخیره کنید. Settings می تواند شامل مقادیر مختلفی باشد که برنامه شما برای به یادآوردن ترجیحات کاربران و تنظیم قسمت های مختلفش به آن ها نیاز دارد. به طور مثال می توانید تغییراتی که کاربر در ظاهر برنامه می دهد (مثل اندازه پنجره و تم برنامه) یا رشته اتصال به دیتابیس را درون فایل App.config ذخیره کنید و هر بار هنگام اجرای برنامه این فایل را بخوانید و تنظیمات کاربر را اعمال کنید.

برای استفاده از قابلیت Settings، در ویژاول استادیو از Solution Explorer بر روی پروژه خود کلیلک راست کنید و گزینه Properties را برگزنید (و یا از پوشه Properties پروژه خود فایل Settings.settings را باز کنید). اگر در تب Settings نیستید، به تب Settings بروید. حالا باید چیزی شبیه به تصویر زیر را ببینید که Settings Designer نام دارد.

Settings Designerهمانطور که مشاهده می کنید هر Setting دارای 4 خصوصیت است :

  • Name : نامی است که در کدنویسی برای دستیابی به مقدار ذخیره شده در این Setting مورد استفاده قرار می گیرد.
  • Type : نوع مقداری است که قرار است در این Setting ذخیره شود. در اینجا تمام نوع های داده ای دات نت فریم ورک پشتیبانی می شوند. به طور مثال شما می توانید رنگ پس زمینه یک پنجره را با توع System.Color ذخیره کنید.
  • Scope : نحوه دستیابی به یک Setting را در زمان اجرا کنترل می کند. اگر از نوع User انتخاب شود، مقدار هم خواندنی است و هم نوشتنی اما اگر از نوع Application در نظر بگیرید،مقدار Setting فقط خواندنی است و از طریق کدنویسی و در حال اجرا غیر قابل تغییر است.
  • Value : مقداری است که هنگام دستیابی به Setting برگردانده خواهد شد. این مقدار باید از همان نوعی باشد که در Type مشخص شده است.

پس از مشخص کردن Settingهای مورد نیاز برنامه خود، می توانید از طریق کد به آن ها دسترسی داشته باشید. در سی شارپ برای دسترسی به این تنظیمات از طریق کد باید از فضای نام Properties استفاده کنید. تمام تنظیماتی که مشخص کرده اید از طریق Properties.Settings.Default در کدنویسی قابل دسترسی اند و IntelliSense آن ها را می شناسد و به شما نشان می دهد. تمام آن ها از نوع مشخصی برخوردار هستند و به اصطلاح Strongly typed هستند.

فرض می کنیم یک Setting به نام Title از نوع String ساخته اید که عنوان پنجره اصلی برنامه شما را در خود ذخیره می کند. برای خواندن آن به صورت زیر کد می نویسیم :

this.Title = Properties.Settings.Default.Title;

و برای ذخیره مقدار ورودی کاربر در این Setting به صورت زیر عمل می کنیم :

Properties.Settings.Default.Title = txtTitle.Text;

Properties.Settings.Default.Save();

بدون صدا زدن متد Save تغییرات درون فایل ذخیره نخواهد شد. فقط به این نکته توجه داشته باشید که Settingهایی که دارای محدوده Application هستند را نمی توانید به صورت کد نویسی تغییر دهید. این نوع تنظیمات فقط از طریق Setting Designer یا تغییر دستی مقدار آن ها در یک ویرایشگر متن قابل تغییر هستند.

استفاده از چند فایل تنظیمات

در بعضی موارد ممکن است برنامه شما به جای یک فایل تنظیمات نیاز به چند فایل تنظیمات داشته باشد. در این مواقع شما می توانید در ویژوال استادیو روی پروژه خود کلیک راست کنید و گزینه Add New item را انتخاب کنید و به دنبال Settings File بگردید. یک نام به جز Settings مثلاً MyNewSettings را برای آن مشخص کنید و دکمه Add را بزنید تا به پروژه شما اضافه شود. حالا به جای Properties.Settings برای دسترسی به تنظیمات فایل جدید از Properties.MyNewSettings استفاده کنید. همین!

farasun.wordpress.com

پ.ن : وبلاگ جدیدی ساختم با عنوان سافتینگ، که نقل قول های مربوط به برنامه نویسی و توسعه نرم افزار را در آن منتشر خواهم کرد. می توانید از اینجا یا اینجا مشترک فید آن شوید. بدیهی است که سرعت آپدیت آن وبلاگ به علت مینیمال بودن از این وبلاگ بسیار سریع تر خواهد بود!

Advertisements

نسخه Client Profile دات نت فریم ورک

اگر تا به حال در ویژوال استادیو 2010 برنامه های WPF یا WinForms نوشته باشید، حتماً متوجه شده اید که به صورت پیش فرض Target این پروژه ها دات نت فریم ورک نسخه Client Profile است. این نسخه از دات نت فریم ورک، زیر مجموعه ای از دات نت فریم ورک 4.0 است که برای برنامه های تحت دسکتاپ بهینه سازی شده است. این نسخه شامل تمام ویژگی هایی است که یک برنامه تحت دسکتاپ نیاز دارد. نسخه Client Profile باعث می شود تا حجم پکیج Install برنامه شما به حداقل برسد و فقط قسمتی از دات نت فریم ورک را بر روی سیستم کاربر نصب می کند که برای اجرای یک برنامه تحت کلاینت مورد نیاز است.

Target Client Profile

اجزای موجود در دات نت فریم ورک کلاینت پروفایل :

  • common language runtime (CLR)
  • ClickOnce
  • Windows Forms
  • Windows Presentation Foundation (WPF)
  • Windows Communication Foundation (WCF)
  • Entity Framework
  • Windows Workflow Foundation
  • Speech
  • XSLT support
  • LINQ to SQL
  • Runtime design libraries for Entity Framework and WCF Data Services
  • Managed Extensibility Framework (MEF)
  • Dynamic types
  • Parallel-programming features
  • Debugging client applications

اجزایی که در نسخه کلاینت پروفایل وجود ندارند :

  • ASP.NET
  • Advanced Windows Communication Foundation (WCF) functionality
  • .NET Framework Data Provider for Oracle
  • MSBuild

Project Templateهایی که به صورت پیش فرض نسخه کلاینت پروفایل را Target قرار می دهند :

  • WPF Application
  • WPF Browser Application
  • WPF Custom Control Library
  • WPF User Control Library
  • Windows Forms Application
  • Windows Forms Control Library
  • Console Application
  • Empty Project
  • Window Service
  • All Office 2007 and Office 2010 project templates
  • WCF Service Library
  • Activity Designer Library
  • Activity Library
  • Workflow Console Application
  • F# Application
  • F# Tutorial

چه موقع از نسخه کلاینت پروفایل استفاده کنیم؟
زمانی که پروژه شما قرار است تحت ویندوز اجرا شود و نیازی به استفاده از وب سرویس و ویژگی های حرفه ای WCF ندارید، استفاده از نسخه کلاینت پروفایل کار عاقلانه ای است. به این دلیل که استفاده از این نسخه باعث می شود تا کاربر برای اجرای برنامه شما نیازی به نصب کامل دات نت فریم ورک 4.0 بر روی سیستم خود نداشته باشد.

راه های دسترسی به داده در دات نت فریم ورک!

در اکثر برنامه های کامپیوتری نیاز به ذخیره و بازیابی داده ها وجود دارد. داده هایی که بدون آن ها سیستم نرم افزاری ما معنایی ندارد. برنامه نویسان معمولاً راه های مختلفی برای این کار سراغ دارند. کسانی که با دات نت فریم ورک برنامه نویسی می کنند راه های مختلفی برای دسترسی به داده ها دارند. در این مطلب با تکنولوژی های مایکروسافت برای این کار آشنا خواهیم شد و سه ORM معروف دنیای دات نت را معرفی خواهیم کرد. مایکروسافت انتخاب های زیادی برای دسترسی به داده ها به برنامه نویسان دات نت می دهد که شما باید با بررسی آن ها و با توجه به نیازهای خودتان یکی از آن ها را انتخاب کنید.

ADO.NET

ADO.NET مجموعه ای از کامپوننت هاست که برنامه نویسان می توانند از آن ها برای برقراری ارتباط با دیتابیس های مختلف استفاده کنند. ADO.NET بخشی از کتابخانه کلاس های پایه دات نت فریم ورک است که توسط مایکروسافت توسعه داده می شود. برنامه نویسان به صورت گسترده از این تکنولوژی برای دسترسی و دستکاری داده های ذخیره شده در یک دیتابیس رابطه ای استفاده می کنند. ADO.NET می تواند با اکثر دیتابیس های موجود کار کند، هر چند به صورت پیش فرض در دات نت فریم ورک فقط فراهم کننده های SQL Server، OleDb و Odbc وجود دارد، افراد و شرکت های دیگر فراهم کننده های دیتابیس های دیگر را برای دات نت ایجاد کرده اند.

برای هر Provider کامپوننت هایی وجود دارند که برنامه نویس با استفاده از آن ها به مقصودش می رسد. به طور مثال برای استفاده از SQL Server در روش ADO.NET کامپوننت هایی مانند SQLConnection و SQLCommand وجود دارد که با استفاده از آن ها می توانید یک دستور SQL را روی داده های موجود در یک دیتابیس SQL Server اجرا کنید. با SQLConnection به دیتابیس موجود در SQL Server وصل می شویم و با استفاده از یک SQLCommand می توانیم یک عبارت T-SQL را که می تواند دستور INSERT, UPDATE, DELETE یا SELECT باشد یا حتی یک Stored Procedure یا عبارت DDL باشد را برای مقصود خاصی روی دیتابیس اجرا کنیم. چون ADO.NET در مورد سینتاکس دیتابیس چیزی نمی داند، دستورات را به صورت یک رشته ساده به SQLCommand می دهیم و این شیء نیز به صورت مستقیم به دیتابیس دستور می دهد.

string query = "SELECT * FROM tblCustomers";
SqlConnection con = new SqlConnection(cnnString);
SqlCommand command = new SqlCommand(query, con);
con.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Response.Write(reader.GetInt32(0) +
reader.GetString(1));
}

نکته ای که باید در مورد ADO.NET بدانید این است که برای استفاده از هر سیستم دیتابیس رابطه ای، مجموعه کامپوننت های جدایی وجود دارد. در مثال بالا از آبجکت های مربوط به SQL Server استفاده کردیم. اگر بخواهید مثلاً از یک دیتابیس اوراکل در برنامه خود استفاده کنید، بایستی از کامپوننت های مربوط به اوراکل استفاده کنید. خوشبختانه تمام این کامپوننت ها بر پایه یک Interface ساخته شده اند، این یعنی شما می توانید با استفاده از کلاس DbProviderFactory برنامه ای بسیازید که با چند نوع دیتابیس مختلف کار کند.

Linq to SQL

مایکروسافت با دات نت فریم ورک 3.0 و 3.5 یک ORM به نام Linq to SQL را به عنوان بخشی از پروژه LINQ خود عرضه کرد. این شرکت مدت ها پیش از آن قول داده بود که یک ORM برای دات نت فریم ورک طراحی کند اما تا نسخه 3.0 دات نت فریم ورک خبری از آن پروژه نشد. Linq to SQL به شما اجازه می دهد که کوئری های LINQ را روی دیتابیس های SQL Server اجرا کنید. علاوه بر این از یک Mapping Framework بهره می برد که به برنامه نویسان اجازه Map کردن جدول های یک دیتابیس را به کلاس ها و بالعکس می دهد. این کار در ویژوال استادیو می تواند به صورت ویژوال یا کدنویسی انجام گیرد. به این صورت که برای هر جدول از دیتابیس یک کلاس تعریف می شود که هر ستون از یک جدول به عنوان یک Property درون آن کلاس تعریف می شود.

نمایی از ابزار طراحی ویژوال Linq to SQL

به مثال زیر توجه کنید :
public class Customer
{
[Column(Name="CustomerID",IsPrimaryKey = true)]
public long ID
{
get { return _ID;}
set { _ID = value;}
}
[Column(Name = "CustomerName")]
public string Name
{
get { return _name; }
set { _name = value; }
}
}

کلاس بالا به جدول tblCustomers که دارای دو ستون CustomerID و CustomerName است Map می شود. قبل از اینکه بخواهید از Linq to SQL استفاده کنید باید این کلاس ها را تعریف کنید. ویژوال استادیو 2008 دارای ابزاری است که به صورت ویژوال به شما امکان Map کردن جدول های یک دیتابیس SQL Server را به کلاس های دات نت می دهد. این ابزار می تواند به صورت اتوماتیک کلاس های مورد نیاز شما را از روی مدل دیتابیس بسازد، و حتی اجازه تغییرات دستی و ایجاد Viewهای مختلف از دیتابیس را به شما می دهد. عملیات Mapping با استفاده از DataContext (که یک رشته اتصال به سرور نیاز دارد) پیاده سازی می شود. سپس شما قادر خواهید بود کوئری های LINQ خود را روی دیتابیس موجود در سرور اجرا کنید، که البته این کوئری ها ابتدا به دستوارت T-SQL متناظر ترجمه و سپس روی دیتابیس مورد نظر اجرا می شوند.

Entity Framework

Entity Framework یک فریم ورک ORM برای دات نت فریم ورک است که نسخه یک آن به همراه دات نت فریم ورک 3.5 سرویس پک 1 عرضه شد اما مورد استقبال توسعه دهندگان قرار نگرفت. نسخه 2 این فریم ورک به صورت بتا به عنوان بخشی از ویژوال استادیو 2010 قابل دسترس است. ADO.NET Entity Framework نام اصلی این فریم ورک است و جزئی از تکنولوژی ADO.NET است.

ابزار طراحی Entity Framework در ویژوال استادیو

ابزار طراحی Entity Framework در ویژوال استادیو

Entity Framework مدل رابطه ای موجود در یک دیتابیس را به مدل مفهمومی تبدیل می کند و آن را به اپلیکیشن ما تحویل می دهد. در مدل رابطه ای عناصر ترکیبی از جداول هستند، به همراه کلید های اصلی و خارجی که جدول ها را به هم مرتبط می سازند. برعکس آن، انواع موجودیت ها مدل مفهومی داده را تعریف می کنند. انواع موجودیت  اجتماعی از چند فیلد است (هر فیلد به یک ستون از دیتابیس Map می شود) و می تواند شامل اطلاعات از چند جدول فیزیکی باشد. انواع موجودیت می توانند به هم مرتبط باشند، مستقل از ارتباطاتی که در مدل فیزیکی دارند. شمای منطقی و نگاشت (mapping) آن به شمای فیزیکی به عنوان یک Entity Data Model یا EDM نمایش داده می شوند که مشخصات EDM در یک فایل XML ذخیره می شود. Entity Framework از EDM برای انجام عملیات نگاشت و دادن قابلیت کار با موجودیت ها به اپلیکیشن استفاده می کند. Entity Framework اطلاعات مورد نیاز هر موجودیت را با Join کردن چندین جدول از مدل فیزیکی (دیتابیس) بدست می آورد. هنگامی که اطلاعات یک موجودیت آپدیت می شود، Entity Framework بررسی می کند که داده ها مربوط به کدام یک از جدول های موجود در دیتابیس هستند، سپس آن ها را با دستور SQL مناسب آپدیت می کند.

هر چند Entity Framework و Linq to SQL بسیار شبیه به هم به نظر می رسند، هر دو ابزارهایی برای طراحی گرافیکی و ویزاردی برای نگاشت یک دیتابیس به مدل شیء گرا دارند و هر دو می توانند از کوئری های LINQ برای مقصود خاصی استفاده کنند، اما با هم تفاوت هایی هم دارند. بیان تفاوت های این دو در این مطلب جایی ندارد.

NHibernate

نمی توان در مورد ORMها در دات نت صحبت کرد اما نام NHiernate را ذکر نکرد. NH یک فریم ورک ORM اوپن سورس برای دات نت فریم ورک است که از روی پروژه موفق Hibernate جاوا وارد دنیای دات نت شد. توضیحات بیشتر در مورد NHibernate توضیحات اضافی است، زیرا این فریم ورک هم وظیفه ORMهای دیگر را انجام می دهد. اکثر برنامه نویسانی که از NH برای نگاشت استفاده می کنند، ابتدا کلاس های خود را تعریف می کنند و سپس با استفاده از یک فایل XML آن ها را به جدول های دیتابیس Map می کنند. Linq to SQL و Entity Framework برخلاف NHibernate از روش Model-first یا مبتنی در دیتابیس استفاده می کنند، به این معنی که هر دو ORM تصور می کنند شما دیتابیسی در اختیار دارید که می خواهید آن به تعدادی آبجکت Map کنید.

در مورد Nhibernate بیش از این صحبت نمی کنم، آقای وحید نصیری در اینجا به صورت کامل در مورد این ORM محبوب نوشته است.

farasun.wordpress.com

انتخاب از میان روش های بالا به عهده خود شماست. در این مطلب کوتاه نمی توان به بررسی تمام زوایا و تفاوت های میان آن ها پرداخت. در مطالب آینده سعی میکنم در مورد نحوه استفاده از هر کدام یک مثال عملی بزنم (البته به جز NHibernate).

بررسی دات نت 4.0 – کتابخانه های کلاس پایه

قرار بود طی چنیدن پست به بررسی ویژگی های جدید دات نت فریم ورک 4.0 بپردازم. در مطلب قبلی به بررسی تغییرات Common Language Runtime پرداختم. با وقفه تقریباً طولانی که به علت اتفاقات اخیر در ایران و امتحانات دانشگاه ها بود، امروز نگاهی گذرا به تغییرات کتابخانه های کلاس پایه دات نت فریم ورک 4.0 بتا 1 خواهیم داشت.

قسمت دوم : تغییرات کتابخانه های کلاس پایه

در این نسخه از دات نت شاهد بهبودهایی در سیستم های ورودی/خروجی، هندل کردن استثناها، Reflection و تغییراتی در انواع مجموعه ای (Collectionها) خواهیم بود. در این مطلب با برخی از مهمترین تغییرات کتابخانه های کلاس پایه یا Base Class Libraries در دات نت فریم ورک 4.0 بتا 1 آشنا خواهیم شد.

BigInteger

ساختار جدید System.Numerics.BigInteger یک نوع داده ای صحیح با دقت دلخواه است که تمام عملیات های استاندارد یک نوع داده Integer را پشتیبانی می کند. این نوع داده می تواند در تمام زبان های مبتنی بر دات نت مورد استفاده قرار گیرد. زبان های جدیدی مثل F#x و IronPython به صورت توکار از این نوع داده پشتیبانی می کنند.

Tuples

یک تاپل (Tuple) یک ساختار داده ای Generic ساده است که مجموعه ای از آیتم های ناهمگن منظم را نگهداری می کند. تاپل ها به صورت Native یا محلی در زبان هایی مثل F#x و IronPython پشتیبانی می شوند، در این نسخه هر زبان برنامه نویسی مبتنی بر دانت نتی مانند C#x و Visual Basic قادر به استفاده از تاپل ها هستند. دات نت فریم ورک 4.0 بتا هشت کلاس جدید جنریک Tuple اضافه کرده است، همچنین این کلاس Tuple شامل متدهای استاتیکی برای ایجاد تاپل هاست.

Exceptions Handling

کتابخانه پایه دات نت فریم ورک 4.0 شامل فضای نام جدیدی به نام System.Runtime.ExceptionServices است که قادر به هندل کردن استثناهایی که corrupted state گفته می شوند، خواهد بود.

I/O

بهبودهایی در سیستم I/O دات نت فریم ورک بوجود آمده است. به طور مثال متدهای شمارشی در کلاس های Directory و DirectoryInfo به جای آرایه، یک مجموعه IEnumerable(T)x بر می گردانند. این کار باعث بهبود این متدها می شود، زیرا دیگر لازم نیست که این متدها ابتدا حافظه ای (معمولاً بزرگ) به آرایه ها اختصاص بدهند، یا منتظر پر شدن تمام خانه های آن آرایه شوند، شما می توانید قبل از اینکه این مجموعه به طور کامل پر شود، از آیتم هایی که تا به حال در مجموعه قرار گرفته اند استفاده کنید.

فضای نام System.IO.MemoryMappedFiles اجازه استفاده از عمل Memory Mapping که در ویندوز موجود است را به برنامه نویس می دهد. شما با استفاده از این قابلیت می توانید فایل های با حجم بسیار بالا را در حافظه باز یا ویرایش کنید. فضای نام System.IO.UnmanagedMemoryAccessor نیز اجازه دسترسی تصادفی به حافظه مدیریت نشده (Unmanaged Memory) را به شما می دهد. بهبودهایی نیز در کلاس های فضای نام System.IO.Compression.DeflateStream و System.IO.Compression.GZipStream بوجود آمده تا فشرده سازی داده ها بهتر از قبل باشند.

Reflection

دات نت فریم ورک 4.0 بتا 1 قابلیت هایی را برای مانیتور کردن کارایی دامنه اپلیکیشن های شما فراهم می کند. با استفاده از دات نت فریم ورک 4.0 مدیریت بهتری بر سیکل زندگی پراسس های اپلیکیشن خود خواهید داشت.

x64-bit View and Other Registry Improvements

بهبودهای کلاس های رجیستری ویندوز در دات نت 4.0 شامل:

  • توانایی مشخص نمودن نمای 32-بیتی یا 64-بیتی از رجیستری ویندوز با استفاده از Microsoft.Win32.RegistryView زمانی که کلیدهای پایه را باز می کنید
  • Microsoft.Win32.RegistryOptions که به شما اجازه می دهد یک کلید فرار (volatile) در رجیستری ویندوز بسیازید که با ریستارت کردن ویندوز از بین خواهد رفت

Threading

  • Unified Model for Cancellation : دات نت فریم ورک 4.0 بتا مدل واحدی برای کنسل کردن عملیات های غیر همزمان یا asynchronous فراهم می کند. کلاس جدید System.Threading.CancellationTokenSource برای ایجاد یک CancellationToken مورد استفاده قرار می گیرد که ممکن است به هر تعداد عملیات روی چندین  thread پاس شود. با صدا زدن متد Cancel()x در شیء token source، مشخصه IsCancellationRequested برابر true می شود و تمام عملیاتی که در این token ثبت شده اند در حالت wait قرار می گیرند.
  • Thread-Safe Collection Classes : فضای نام جدید System.Collections.Concurrent مجموعه ای از کلاس های thread-safe را معرفی می کند. استفاده از این کلاس ها در سناریوهای multi thread باعث بهبود بخشیدن کارایی انواع مجموعه ای مثل ArrayList و List(T)x می شود.

farasun.wordpress.com

در این مطلب کوتاه نمی توان تمام تغییرات جدید کتابخانه های کلاس پایه دات نت 4.0 را به طور کامل شرح داد. در مطالب بعدی به تغییرات جدید زبان های ویژوال بیسیک و سی شارپ در نسخه 2010 آن ها خواهیم پرداخت. برای از دست ندادن این مطالب مشترک فید فراسان شوید!