انجمن برنامه نویسان البرز

تبلیغات

کاربرد interface در برنامه نویسی سی شارپ

کاربرد interface در برنامه نویسی سی شارپ


ما با interface ها آشنایی داریم و میدانیم که یک interface به بیان خیلی ساده، شمای یک کلاس است. این تعریف تنوری، معمولا دردی را از ما دوا نمیکند و ما در عمل نمیدانیم کاربرد interface چیست. ویدیوی زیر را ببینید:

در این ویدیو ما برای شما کاربرد interface را به صورت عملی توضیح میدهیم. اگر نیاز به توضیحات بیشتری داشتید، توضیحات انتهای مطلب را مطالعه کنید.

واقعیت این است که interface ها میتوانند کمک های بسیاری در برنامه نویسی به ما بکنند. مواردی مثل از بین بردن وابستگی ها (circular dependency) یا سهولت ایجاد تغییرات در کد، مثال ها خوبی هستند.

فرض کنید شما برنامه نویسی یک شرکت هستید و میخواهید یک سیستم ثبت اطلاعات با دیتابیس اکسس بسازید. سیاست شرکت به شکلی است که ممکن است این برنامه، تغییر کند و دیتابیس آن SQL Server بشود. اما در حال حاضر باید با اکسس کار کند. معمولا برنامه نویسان، یک کلاس اکسس میسازند و کدهای مورد نیاز را در آن وارد میکنند و هروقت نیاز به تغییر به SQL شد، کلاس ها را تغییر نام میدهند و کدها را اصلاح میکنند.

این روش غلط نیست. اما خوب هم نیست. بهتر است از ابتدا برنامه خودتان را با کاربرد interface و کمی تغییر بنویسید. به این شکل که یک interface بسازید و در آن متدهای مربوط به ثبت اطلاعات را بنویسید. حالا یک کلاس اکسس بسازید که این interface را implement میکند و بدنه متدها را مینویسد. در برنامه، به جای کلاس اکسس، با این interface کار کنید. در نتیجه هر وقت که نیاز شد برنامه با sql کار کند، تنها تغییر مورد نیاز، این خواهد بود که یک کلاس sql بسازیم و آنرا از interface که ساخته بودیم implement کنیم. از انجایی که برنامه ما به جای استفاده از کلاس اکسس، از interface استفاده میکند، بلد است با تمام کلاس هایی که از جنس این interface باشند، بدون هیچ تغییری کار کند! نمونه کدها را در ادامه ببینید. تنها تغییری که نیاز است، در کلاس برنامه است که شما خطی را که interface با مقدار کلاس access مقداردهی شده، کامنت میکنید و آنرا با کلاس sql مقداردهی میکنید.

نمونه کد interface:


    interface IDatabase
    {
        void Execute(string command);
    }

نمونه کد کلاس اکسس:


    public class Access : IDatabase
    {
        public void Execute(string command)
        {
            OleDbConnection myConnection = new OleDbConnection();
            myConnection.ConnectionString = "your connection goes here";
            OleDbCommand myCommand = new OleDbCommand();
            myCommand.Connection = myConnection;
            myCommand.CommandText = command;
            myConnection.Open();
            myCommand.ExecuteNonQuery();
            myConnection.Close();

        }
    }

نمونه کد کلاس sql server:


    public class SQL : IDatabase
    {
        public void Execute(string command)
        {
            SqlConnection myConnection = new SqlConnection();
            myConnection.ConnectionString = "your connection goes here";
            SqlCommand myCommand = new SqlCommand();
            myCommand.Connection = myConnection;
            myCommand.CommandText = command;
            myConnection.Open();
            myCommand.ExecuteNonQuery();
            myConnection.Close();
        }
    }

نمونه کد اصلی برنامه:


    class Program
    {
        static void Main(string[] args)
        {
            //تنها تغییر مورد نیاز برنامه برای عوض کردن دیتابیس از اکسس به اس کیو ال اینجا است
            //Data.IDatabase db = new Data.Access();
            Data.IDatabase db = new Data.SQL();
            db.Execute("insert into students...");
            db.Execute("insert into teacher...");
            db.Execute("insert into school...");
        }
    }

برای مشاهده سایر تکنیک ها، پیگیر بخش تکنیک های سطح بالای سی شارپ باشید.

دانلود نمونه کد پروژه




کلمات کلیدی :

نظر بدهید

10 دیدگاه برای “کاربرد interface در برنامه نویسی سی شارپ

  • فرید گفته
    12 آوریل 17

    سلام
    اگه میشه آموزش تمیرینی که آخر آموزشتون فرمودید هم بگذارید
    ممنون

    • علیرضا صبوئی گفته
      12 آوریل 17

      دوست خوبم اگر منظورتونو درست فهمیده باشم، سورس کدو میخواستید؟ لینک دانلودشو در انتهای مطلب براتون اضافه کردم. اگر منظورتونو اشتباه متوجه شدم، لطفا توضیح بیشتری بدید.

  • مرتضی نوروزی گفته
    12 آوریل 17

    سلام
    دمتون گرم خیلی خوب بود! آموزش ها عالی و مهندسین! خدا خیرتون بده

  • مرتضی نوروزی گفته
    12 آوریل 17

    سلام مجدد
    خیلی وقت ها کوئری sqlای که پاس بفرستیم به کلاسی که ساختیم، پارامتر داره(مثل insert into) یا میخواییم از اجرای کوئری مقداری رو به ما برگردونه(مثل دستور select) اون موقع چطور و کجای کد رو باید تغییر بدیم؟

    • علیرضا صبوئی گفته
      12 آوریل 17

      سلام دوست عزیز. دست روی نکته خیلی خوبی گذاشتید.
      ببینید واقعیت اینه که اگر ما در لایه Business نرم افزار از SQLParameter استفاده کنیم، یک خطا مرتکب شدیم. اینکه Business نباید وابسته به SQL باشه. پس سوال این میشه که چطور پارامترها رو پاس بدیم.
      چندتا راه حل وجود داره. فقط دقت داشته باشید که در اکثر مواقع ما از ORM ها استفاده میکنیم بنابراین مثال این ویدیو بیشتر جنبه آموزشی داره. اما به هر حال اگر نیاز داشتید که پارامتر پاس بدید، چند راه حل دارید:
      ۱٫ یک کلاس جدید بسازید و از کلاس DataParameter ارث بری کنید. کلاس SQLParameter هم به همین ترتیب ساخته شده. (شاید اسم DataParameter را دقیق نگفته باشم اما چیزی توی همین مایه ها بود) و به جای SQLParameter از DataParameter استفاده کنید.
      ۲٫ راه دوم و ساده تر استفاده از Hashtable است که یک لیست Key/Value است.
      ۳٫ یک راه ساده دیگر، استفاده از دستور String.Fromat و اضافه کردن مقادیر پراپرتی ها در خود کوئری است.

      • مرتضی نوروزی گفته
        12 آوریل 17

        سلام
        با عرض پوزش پیشنهاد دارم سایت رو طوری تعییر بدید که وقتی شما جواب کامنت ما رو میدید ما توسط ایمیل ما باخبر بشیم، چون به هر حال جواب های شما با ارزشه! خودم الان با چند روز تاخیر جواب شما رو خوندم.
        بابت توضیح کاملتون بسیار ممنونم!
        قبلا در برنامه هایی که مینوشتم لایه BLL من مستقیم با کدهای sql درگیر بود اما یه مدته از Stored Procedure استفاده میکنم و داخل برنامه SP را فراخوانی میکنم که الان به این نتیجه رسیدم این روش هم خیلی خوب نیست چون باعث بروز خطا در زمان اجرا میشه و هیچ کنترلی برای بررسی خطا در زمان کامپایل برنامه ندارم و کدم خیلی وابسته به sql هست گرچه استفاده از SP مزایای زیادی داره و نسبت به نوشتن کدsql داخل کدهای اصلی خیلی بهتره!
        در حال حاظر برای ارتباط بین پایگاه داده و برنامه، و نحوه پیاده سازی بسیار سردرگمم.
        بین کارایی و سرعت و سهولت استفاده و کامپایل و سادگی پیاده سازی و ….

        • علیرضا صبوئی گفته
          12 آوریل 17

          جناب نوروزی عزیز سلام.
          در باب این قضیه که SP ها بهتر هستن یا Inline Query ها، بحث بسیار بسیار مفصل و ناتمامه. مث دعواهای متداول بین اندرویدی ها و آی او اسی ها یا استقلالی ها و پرسپولیسی ها :))
          راستش بر خلاف شما، بنده بیشتر طرفدار sql در برنامه یا همون Inline Query هستم.
          اما در مورد سوالتون درباره لایه های برنامه. خیلی خوشحالم که ذهن شما درگیر این موضوع هستش. همین که رویه های غلط جاری، برای شما غیر طبیعی هستند، نشون میده که برنامه نویس رو به پیشرفتی هستید.
          در رابطه با ارتباط دیتابیس با برنامه، شخصا بهترین روشی رو که تا به حال تجربه کردم، استفاده از Entity Framework بوده. به شما پیشنهاد میکنم آموزش مربوط به Entity را بخوانید و بعد از مطالعه این آموزش، در کامنت ها بنده را مطلع کنید تا یک روش بسیار خوب تقسیم و معماری لایه ها را به شما نشان بدهم.
          متاسفانه هنوز فرصت نکردیم تا آموزش Entity را در سایت قرار بدهیم. اما آموزش های بسیار ساده و مفیدی را با سرچ در گوگل پیدا میکنید.
          در پناه حق

          • مرتضی نوروزی گفته
            12 آوریل 17

            بابت پاسخ دادن سریع و کاملتون آقای صبوئی بسیار سپاسگذارم، با دقت فراوان جوابهای خوبتون رو مطالعه میکنم.
            کاش مشخص بود Inline Query ها استقلالی
            هستن یا SP ها :))
            بابت تعریفتون، ممنونم لطف دارید.
            همان طور که حتما میدونید، وقتی یه پروژه شاخ و برگ میگیره و بزرگ میشه این مسائل بیش از اندازه مهم میشه طوری که توسعه و ادامه کار منوط به این مسائله!
            درباره مبحث Entity Framework هم اطلاعی ندارم؛ حتما سرچ خواهم کرد و آموزش ها را مطالعه خواهم کرد و بعد از آن در کامنت شما رو مطلع خواهم کرد، تا شما اون روش خوب تقسیم و معماری لایه ها رو که وعده دادید بفرمایید.
            خوشحال میشم شما هم این آموزش ها را تو سایت خوبتون قرار بدید.

          • علیرضا صبوئی گفته
            12 آوریل 17

            زنده باشید. ممنون از لطفی که به ما دارید

  • اسماعیل پرتوی گفته
    12 آوریل 17

    خیلی عالی بود دستتان درد نکند. مثال های کاربردی مفهوم را بهتر میرساند.