معماری سه لایه نرم افزار در سی شارپ به روش Code First

وقتی حرف از معماری می شود احتمالا تصویر زیر به ذهنت خطور می کند.

معماری در ساخت سازه های فیزیکی يعنی ارائه بهترين راه حل، چه استفاده از راه‌حل‌های گذشته، چه خلق راه‌حل جديد برای رسيدن به هر هدفی.

اما در نرم افزار به این معنا است که هر چیزی  (جلو تر منظورم از کلمه “چیز” را به تو خواهم گفت) را در یک جای درست بکار ببری یا بهتر است بگویم هر چیزی را در جای خودش بکار ببری.

در نرم افزار هر چیز را در جای خودش بکار ببرم که چه شود؟ هدف این کار چیست ؟

بگذار از اینجا شروع کنیم که یک کاربر پشت نرم افزارش می نشیند تا کارش را انجام دهد.

این کار می تواند ثبت نام، جست و جو یا هر چیز دیگری باشد.

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

بدون آنکه بداند و یا حتی دلش بخواهد بداند که در پشت صحنه نرم افزارش  چه اتفاقی می افتد؟

اما برای تو که برنامه نویس هستی مهم است.

اگر یک روز همان کاربر کارش نا تمام بماند چون برنامه اش مشکل داشته به تو تلفن می زند.

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

خب در طبیعی ترین حالت تو به سراغ کدهایی که برای او نوشته ای می روی.

در این حالت اگر برای ساخت برنامه ات از معماری استفاده نکرده باشی با چنین حالتی روبرو خواهی شد :

معماری سه لایه

کلی کدهای در هم بر هم در یک صفحه.

در شکل زیر سعی کردم تصویر خودت را بعد از دیدن کدهای در هم ریخته بکشم.

و این وضعیت یعنی مشتری تو معطل می شود، خودت خسته می شوی طوری که حتی ممکن است به سرت بزند پروژه را از اول بنویسی.

اما معماری سه لایه چطور به تو کمک می کند؟

اما معماری نرم افزار به تو کمک می کند تا از این اتفاق پیشگیری کنی و همانطور که می دانی پیشگیری بهتر از درمان است.

و احتمالا زمانی که مشتری به تو زنگ می زند با وجود معماری در نرم افزارت در شرایط زیر قرار خواهی گرفت.

کاملا ریلکس و راحت کارت را انجام می دهی و کار مشتری ات را بی دغدغه به او تحویل می دهی.

به جز این معماری سه لایه نرم افزار مزیت های دیگری هم می تواند بر تو داشته باشد.

مثلا باعث می شود انعطاف پذیری تو و یا تیمت برای بروز رسانی یک قسمت خاص از نرم افزار بیشتر شود.

چراکه با داشتن معماری، هر قسمت از نرم افزار به قسمت دیگر وابستگی نخواهد داشت.

پس به راحتی می توانی یک قسمت جدید به برنامه ات اضافه کنی یا اینکه یک قسمت را تغییر دهی.

و در مدت زمان کوتاه تری می توانی این کار را انجام دهی.

بگذار بروم سراغ معماری سه لایه و با یک مثال شفاف سازی کنم .

معماری سه لایه نرم افزار

اگر بخواهیم به کدهای یک پروژه نگاه کنیم می توان گفت که کدها از سه جنس متفاوت هستند.

کدهای مربوط به ظاهر برنامه یا همان واسط کاربری

کدهای مربوط به شرط های تجاری

کدهای مربوط به (درج – فراخوانی – آپدیت – حذف) داده ها در بانک اطلاعاتی

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

اما در معماری سه لایه برای هر کدام از آن ها یک لایه در نظر می گیریم به نام های زیر:

  • Presentation Layer

این لایه همان لایه‏ای است که کاربران با آن در ارتباط هستند. همانند فرم‏های ویندوز.

  • Business Logic Layer

این لایه، یک لایه ‏ میانی است که با منطق و چگونگی عملکرد برنامه سروکار دارد.

  • Data Access Layer

این لایه، تکنولوژی‏ هایی همچون ADO.NET، EF، L2S و زبانهای پرس و جویی چون SQL،LINQ را جهت دسترسی به داده‏ها و اجرای دستورات بانکی برای متدهای  CRUD یا همان Create،Read ،Update ، Delete بکار می ‏گیرد.

تکنولوژی پیاده سازی لایه ها در معماری سه لایه

تا اینجا معماری سه لایه را شناختی. اکنون وقت آن است با تکنولوژی هایی که برای پیاده سازی هر کدام استفاده می شود آشنا شوی.

همانطور که در تصویر زیر می بینید برای هر لایه از این معماری می تواند توسط تکنولوژی های متفاوت استفاده پیاده سازی شود:

که در این مقاله لایه Presentation Layer را با استفاده از Windows App و دو لایه Business Logic و Data Access را توسط  Class Library پیاده سازی می کنیم.

و حالا نوبت به نحوه برقراری ارتباط بین این سه لایه می رسد.

ارتباط بین سه لایه Presentation ، BLL و DAL چگونه برقرار می شود؟

مگر ممکن است کدها از هم جدا شوند و بتوانند با هم ارتباط برقرار کنند ؟ جواب واضح است.

بنابراین این سه لایه با هم در ارتباط اند و ارتباط آن ها به شکلی است که در زیر نمایش داده می شود.

برای اینکه هر لایه بتواند با لایه قبلی ارتباط بگیرد کافی است عبارت using و نام لایه ای که باید با آن ارتباط برقرار کند را در قسمت using ها قرار دهیم. مانند آنچه که در تصویر بالا می بینید .

مانند عبارت ;using Businesslogiclayer ، این عبارت در واقع آدرس لایه Business logic layer را به لایه Presentation Layer می دهد.

مطابق تصویر می توان گفت:

Presentation Layer با  Business Logic Layer ارتباط برقرار می کند.

و  Business Logic Layer با Data Access Layer ارتباط برقرار می کند.

لایه Data Access هم برای ارتباط با بانک اطلاعاتی طبق آنچه در مقاله Entity Framework گفته شد، باید از ;using System.Data.Entity استفاده کند.

 Business Entity لایه برقرار کننده ارتباطات

حالا وقت آن است که لایه Business Entity را بشناسی.

سه لایه ای  که در مرحله قبلی معرفی شدند با هم گفت و گو می کنند و بین خودشان داده رد و بدل می کنند.

برای این داده رد و بدل کردن از یک لایه دیگر به نام  Business Entity استفاده می کنیم.

طبق این تعریف می توانی نتیجه بگیری که Business Entity لایه ای است که همه لایه ها باید آن را بشناسند و همه لایه ها با آن ارتباط دارند.

بنابراین عکس بالا را به شکل زیر آپدیت می کنم و Business Entity را هم اضافه می کنم.

تا اینجا لایه های معماری را شناختی، تکنولوژی که می توانی برای پیاده سازی  هر لایه استفاده کنی را هم آشنا شدی.

به علاوه متوجه شدی که این لایه ها چطور با هم ارتباط برقرار میکنند.

اما احتمالا سوال زیر برایت پیش بیاید.

جگونه تشخیص دهم کدام کدها در کدام لایه قرار می گیرند؟

با یک مثال جواب این سوال را به تو نشان می دهم چطوری جنسیت کدها را مشخص کنید.

سناریو به این شکل است که:

قرار است یک ثبت نام صورت گیرد به طوری که افرادی که زیر ۱۸ سال هستند نباید ثبت نام شوند.

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

مثلا کاری کنی که کاربر نتواند یک TextBox را خالی رها کند.

هر آنچه در این داستان سه خطی به تو گفتم در تصویر پایین پیاده سازی شده.

اگر بخواهیم معماری سه لایه به همراه Business Entity را روی آن پیاده سازی کنی به شکل زیر در خواهد آمد:

پس در این عکس نشان داده شده است چطور کدهای مربوط به هر لایه از معماری را باید مشخص کنی.

اما این مشخص کردن جنسیت کدها کافی نیست چون هنوز این کدها درهم برهم هستند.

پیاده سازی معماری سه لایه در نرم افزار

برای اینکه معماری سه لایه به طور کامل پیاده سازی شود باید هر قطعه از کدهای مشخص شده در عکس را در لایه جداگانه ای قرار دهی.

این کار را مرحله به مرحله جلو می رویم.

ساخت Business Entity ، لایه برقرار کننده ارتباطات بین سه لایه دیگر

همانطور که می دانی قرار است اطلاعات مربوط یک انسان ، (در این مثال نام، نام خانوادگی و سن ) توسط کاربر وارد لایه Presentation Layer  می شود.

و طبق آنچه در بالا گفته شد از لایه های دیگر نیز عبور خواهد کرد. و بین آنها جا به جا خواهد شد.

پس برای اینکه بتوان این اطلاعات را در جایی ذخیره کرد تا بین لایه های جابه جا شود و همچنین متناسب با آن یک جدول در بانک اطلاعاتی ساخته شود، به یک کلاس به نام human با پراپرتی هایی که در فیلم زیر می بینید نیاز داریم.

این کلاس باید در لایه BusinessEntity که به شکل زیر ساخته می شود قرار بگیرد.

بنابراین فراموش نکن که هر موجودیت دیگری اضافه شود به سیستم نرم افزاری تو باید برای آن یک کلاس در لایه Business Entity برای آن در نظر بگیری.

 

 

ساخت Data Access Layer در معماری سه لایه

هر آنچه  که مرتبط با بانک اطلاعاتی است را در این لایه قرار می دهیم.

مرحله اول:

برای ساخت یک  Class Library مانند آنچه در کلیپ Business Entity نشان داده شد باید عمل کنی.

برای ساخت لایه Data Access Layer نیز به یک Class Library نیاز داری.

مرحله دوم:

پس از اینکه Class Library را ساختید برای آن Entity Framework را نصب کنید. تا بتواند با بانک اطلاعاتی ارتباط برقرار کند.

مرحله سوم:

Connection String را برای لایه Data Access Layer در App.config به شکل زیر تنظیم کنید.

در این قسمت برای انسانی که قرار است اطلاعات آن را در بانک ذخیره کنی نیاز به اقداماتی داری.

چون در این مثال از روش Code first استفاده می شود، بنابراین باید نماینده بانک اطلاعاتی که منجر به ساخت جدول در دیتابیس می شود را در Data Access Layer می سازیم:

این نماینده کلاسی است به نام db به شکل زیر:

قسمتی که در تصویر با رنگ زرد مشخص شده همان آدرسی است که در ابتدای این مقاله توضیح داده شد.

برای ارتباط با لایه Business Entity از عبارت using Business_Entity استفاده می کنیم اما پیش از آن لازم است این لایه را به رفرنس های Data Access Layer اضافه کنیم.

این کار را به شکل زیر انجام می دهیم.

 

 

پس الان کلاس db در لایه Data Access Layer قادر است با کلاس human در لایه Business Entity ارتباط برقرار کند.

در این مثال  فعلی که قرار است انجام شود “درج اطلاعات کاربر در بانک “است .

کدهای مربوط به درج اطلاعات کاربر در بانک را در یک متد به نام Register قرار می دهیم و برای آن هم یک کلاس به نام dlHuman قرار می دهیم.

مانند شکل زیر:

این متد، اطلاعات یک انسان را که در h قرار دارد را به دیتابیس اضافه می کند.

ساخت لایه Business Logic در معماری سه لایه

اگر  به خاطر داشته باشی در لایه Business Logic می بایست بالای ۱۸ سال بودن افرادی که در حال ثبت نام هستند را بررسی کنی.

مراحل ساخت Business Logic مانند دو لایه دیگر است.

برای بررسی ۱۸ ساله بودن یا نبودن یک انسان ها به یک متد نیاز داریم.

برای اینکه در کل پروژه فراخوانی ها به درستی صورت گیرد نام هایی که انتخاب می شوند بسیار مهم هستند.

بنابراین نام متدی که برای بررسی شرط ۱۸ ساله بودن استفاده می کنیم را هم Register می گذاریم.

این کار را در یک  کلاس به نام blhuman انجام می دهیم. مانند شکل زیر:

اما پیش از اینکه به سراغ نوشتن مند برویم، باید آدرس دهی را انجام دهیم:

و در نهایت این کلاس به شکل زیر خواهد بود.

همانطور که در عکس بالا با رنگ زرد و سبز مشخص شده است، آدرس لایه های Business Entity و Data Access Layer برای Business Logic مشخص شده است.

و اما فعل Register در کلاس blhuman در لایه Business Logic:

پس از بررسی ۱۸  ساله بودن یا نبودن ، در صورتی که سن وارد شده بیشتر از ۱۸ باشد متد Register از کلاس dlhuman فراخوانی شده است تا اقدام به ثبت نام فرد صورت گیرد.

ساخت Presentation Layer در معماری سه لایه

این لایه در واقع همان لایه ای است که کاربر با آن ارتباط برقرار می کند یا همین User Interface است.

Presentation Layer می تواند با توجه به پلت فرم های مختلف که تو استفاده می کنی (ویندوز – وب – موبایل) با تکنولوژی های مختلف پیاده سازی شود.

مثلا در پلتفرم وب، این لایه با HTML و CSS پیاده سازی می شود و در موبایل با زبان دارت، جاوا،ری اکت نیتیو و سایر زبان های برنامه نویسی پیاده سازی. می شود.

اما در این مثال من از ویندوز اپلیکیشن استفاده می کنم.

در این ویدئو نحوه ساخت Presentation Layer را در پلت فرم ویندوز به تو نمایش داده ام.

همچنین در نظر داشته باش که می توانی نام  WindowsFormsApp8 را به نام presentation layer تغییر دهی.

خب اما کدهایی که در عکس بالا به رنگ آبی نشان داده شده را کجا باید قرار دهم ؟

این کدها قرار است خالی بودن یا نبودن TextBox ها را نمایش دهد.

بنابراین جای درست برای قرار گیری آنها دقیقا در رویداد کلیک مریوط به دکمه ای است که در ویدئو بالا دیدید قرار دادم.

پس با یک دبل کلیک بر روی دکمه وارد رویداد کلیک آن می شویم و کدهای مربوط به بررسی پر یا خالی بودن TextBox  ها را قرار می دهیم.

نکته ای که نباید فراموش کنید:

Connection String  را هم باید در Data Access Layer قرار دهیم و هم WindowsFormsApp8 که در واقع همان presentation layer است.

این لایه به Entity Framework هم نیاز دارد. پس فراموش نکنید که آن را برای این لایه نیز نصب کنید.

همچنین:

لایه Presentation Layer باید آدرس دو لایه Business Logic و Business Entity را بداند تا بتواند با آنها ارتباط برقرار کند.

پس از انجام نکات گفته شده، در  رویداد کلیک دکمه ای که برای انجام ثبت نام در فرم قرار دادیم کدهای زیر را قرار می دهم.

در این تصویر خالی نبودن textbox ها بررسی شده است. در صورتی که هیچکدام خالی نباشند، اطلاعات وارد شده با کدهای زیر به لایه Business Logic  می رود تا سن را بررسی کند.

در همین قسمت پیاده سازی معماری  ۳ لایه به پایان می رسد و فقط کافی است نرم افزار را تست کنی تا ببینی اطلاعات درج می شود.

Entity Framework چیست؟

Entity Framework چیست؟ ارتباط با دیتابیس با استفاده از انتیتی فریمورک

در این مقاله قصد دارم به تو نشان دهم که چگونه می توانی با استفاده از یک تکنولوژی به نام Entity Framework با دیتابیس ارتباط برقرار کنی.
ادامه مطلب …

تو هم می توانی بدون اینکه یک کد نویس عالی باشی، یک برنامه نویس حرفه ای باشی

اگر دوست داری بدانی موفق ترین شرکت های برنامه نویسی و استارت آپ ها چگونه کار می کنند، بعید می دانم بخواهی این مقاله را از دست بدهی

ادامه مطلب …

زبان های برنامه نویسی زبان برنامه نویسی پایتون زبان برنامه نویسی go زبان برنامه نویسی جاوا

انواع زبان های برنامه نویسی و کاربرد آنها

در این مقاله به معرفی انواع زبان های برنامه نویسی موجود در دنیا و کاربرد آنها خواهیم پرداخت. ادامه مطلب …

کوئری نوشتن با استفاده از زبان SQL جهت بهینه سازی برنامه ها

در این مقاله کوئری های اصیل SQL که نوع کلاسیک پرس‌ و جو ها هستند را بررسی خواهیم کرد.
ادامه مطلب …

کوئری یا پرس و جو با استفاده از لینکیو ( LINQ )

کوئری یا پرس و جو با استفاده از لینکیو ( LINQ ) در سی شارپ

خیلی نیاز به تاکید نیست که اهمیت قابلیت ” پرس و جو یا کوئری ” برای هر اپلیکشنی در هر پلتفرمی مثل اهمیت دست و پا برای بدن انسان است.
ادامه مطلب …

فروش نرم افزار

چطور برنامه نویسی را یاد بگیرم که من را به آرزویم برساند؟‎

مدرس برنامه نویسی، و ” سرفصل های دوره” اگراز اولین دغدغه هایت در انتخاب آموزش های برنامه نویسی نباشد، احتمالا  از مهم ترین آن ها خواهد بود.
ادامه مطلب …

5 دلیل که چرا برای آموزش برنامه نویسی دیر نیست ؟

۵ دلیل که چرا برای آموزش برنامه نویسی دیر نیست ؟ برنامه نویسی بی ارتباط با سن

برای آموزش برنامه نویسی کافی است بتوانی نفس بکشی و خون در رگ هایت جریان داشته باشد. یعنی شرط لازم و کافی برای برنامه نویس شدن ” زنده بودن ” است.
ادامه مطلب …

برنامه نویس شدن

برنامه نویس شدن چگونه است و برنامه نویسی را از کجا شروع کنیم ؟

در این مقاله به تو می گویم که چطور می توانی از شر دغدغه هایی که در مسیر برنامه نویس شدن برایت قرار می دهند خلاص شوی

 

ادامه مطلب …

نرم افزار اپلیکیشن برنامه نویس application programmer software

نرم افزار ، اپلیکیشن و برنامه نویس نیاز های جهان هستی

آنچه در این مقاله خواهید خواند : چرا برنامه نویس ها نباید نگران آینده شغلشان باشند.
ادامه مطلب …