مقدمه

یکی از اصول اساسی در مهندسی نرم‌افزار، استفاده مجدد از کد (Code Reuse) است. به جای اینکه یک منطق مشابه را بارها و بارها در پروژه‌های مختلف بنویسیم، می‌توانیم آن را در یک واحد مستقل و قابل استفاده مجدد به نام کتابخانه‌ی کلاس (Class Library) قرار دهیم. یک کتابخانه کلاس، پروژه‌ای است که پس از کامپایل، به یک اسمبلی .dll تبدیل می‌شود. این فایل .dll شامل کلاس‌ها، اینترفیس‌ها و دیگر انواع داده‌ای است که می‌توانند توسط پروژه‌های دیگر (مانند اپلیکیشن‌های کنسول، وب یا دسکتاپ) مورد ارجاع قرار گرفته و استفاده شوند. در این درس، به صورت گام به گام نحوه‌ی ساخت یک کتابخانه‌ی کلاس ساده و سپس استفاده از آن در یک اپلیکیشن کنسول را یاد خواهیم گرفت.

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

اولین قدم، ایجاد یک پروژه‌ی جدید از نوع Class Library در ویژوال استودیو یا با استفاده از .NET CLI است. ما یک کتابخانه‌ی ساده برای انجام محاسبات روی رشته‌های متنی ایجاد خواهیم کرد.

در ویژوال استودیو، یک پروژه‌ی جدید از تمپلت Class Library ایجاد کرده و نام آن را StringLibrary می‌گذاریم. ویژوال استودیو به طور خودکار یک فایل به نام Class1.cs ایجاد می‌کند. ما نام این فایل را به StringUtils.cs تغییر داده و محتوای آن را به صورت زیر می‌نویسیم.

Copy Icon StringUtils.cs
namespace StringLibrary
{
    // A static helper class for string operations.
    public static class StringUtils
    {
        // An extension method to check if a string starts with an uppercase letter.
        public static bool StartsWithUpper(this string str)
        {
            if (string.IsNullOrWhiteSpace(str))
                return false;

            return char.IsUpper(str[0]);
        }
    }
}

در این کد، ما یک کلاس استاتیک به نام StringUtils در فضای نام StringLibrary ایجاد کرده‌ایم. این کلاس شامل یک متد بسطی (extension method) به نام StartsWithUpper است که بررسی می‌کند آیا یک رشته با حرف بزرگ شروع می‌شود یا خیر.

قدم دوم: ساخت اپلیکیشن مصرف‌کننده

اکنون که کتابخانه‌ی خود را داریم، به یک برنامه‌ی دیگر برای استفاده از آن نیاز داریم. یک پروژه‌ی جدید از نوع Console App در همان Solution ویژوال استودیو ایجاد کرده و نام آن را ShowcaseApp می‌گذاریم.

قدم سوم: افزودن ارجاع (Reference)

برای اینکه پروژه‌ی ShowcaseApp بتواند از کلاس‌های تعریف‌شده در StringLibrary استفاده کند، باید یک ارجاع (Reference) از ShowcaseApp به StringLibrary اضافه کنیم. این کار به کامپایلر می‌گوید که هنگام ساخت ShowcaseApp، باید به اسمبلی StringLibrary.dll نیز نگاه کند.

در ویژوال استودیو، در پنجره‌ی Solution Explorer، روی پروژه‌ی ShowcaseApp راست‌کلیک کرده، گزینه‌ی Add و سپس Project Reference را انتخاب می‌کنیم. در پنجره‌ی باز شده، پروژه‌ی StringLibrary را انتخاب کرده و دکمه‌ی OK را می‌زنیم.

قدم چهارم: استفاده از کتابخانه

اکنون همه چیز برای استفاده از کتابخانه‌ی ما آماده است. ما می‌توانیم در فایل Program.cs از پروژه‌ی ShowcaseApp، فضای نام StringLibrary را using کرده و از متد بسطی آن استفاده کنیم.

Copy Icon Program.cs
// We must add a 'using' directive to access the types in the library.
using StringLibrary;

Console.WriteLine("Enter a string:");
string input = Console.ReadLine();

// Now we can use the extension method from our class library.
if (input.StartsWithUpper())
{
    Console.WriteLine("The string starts with an uppercase letter.");
}
else
{
    Console.WriteLine("The string does not start with an uppercase letter.");
}

با اجرای پروژه‌ی ShowcaseApp (با راست‌کلیک بر روی آن و انتخاب Set as Startup Project)، برنامه به درستی کار کرده و از متد تعریف‌شده در کتابخانه‌ی کلاس ما استفاده می‌کند.

چرا از کتابخانه‌های کلاس استفاده کنیم؟

  • قابلیت استفاده مجدد: شما می‌توانید یک کتابخانه‌ی کلاس را در چندین پروژه‌ی مختلف به کار ببرید.
  • سازماندهی و معماری: در معماری‌های چندلایه‌ای، هر لایه از برنامه (مانند لایه‌ی دسترسی به داده، لایه‌ی منطق کسب‌وکار و لایه‌ی نمایش) می‌تواند در یک کتابخانه‌ی کلاس جداگانه پیاده‌سازی شود. این کار باعث جداسازی مسئولیت‌ها و افزایش قابلیت نگهداری کد می‌شود.
  • اشتراک‌گذاری: شما می‌توانید کتابخانه‌ی خود را به صورت یک فایل .dll در اختیار دیگران قرار دهید یا آن را به صورت یک پکیج NuGet منتشر کنید تا جامعه‌ی بزرگ‌تری از برنامه‌نویسان بتوانند از آن استفاده کنند، بدون اینکه نیازی به دسترسی به کد منبع شما داشته باشند.