PDA

View Full Version : سوال: پیاده سازی لایه دسترسی داده (DAL) با استفاده از الگوهای طراحی شی گرا (Design pattern)



amin-21
سه شنبه 16 دی 1393, 16:12 عصر
روی یه پروژه ی شخصی دارم کارم میکنم تحت معماری سه لایه، اما فعلا تو همون لایه ی DAL لنگ موندم
میخوام تا یه جاهایی از کاره همین لایه هم به صورتی باشه که تو پروژه های دیگه هم بشه ازش استفاده کنم.
کلاسایی که تا اینجا تعریف کردم به صورت زیر بوده:

1- یه کلاس به اسم ConnectionManager که به صورت sealed تعریف شده با سازنده ی private و متدهایی static برای خوندن کانکشن استرینگ از کانفیگ و ایجاد کانکشن و همینطور دوتا متد برای open و close کردن کانکشن

2- یه کلاس به اسم DbUtility که به صورت abstract تعریف شده که یه سری متدهای پایه ای مثل ایجاد کانکشن( با استفاده از متدهای کلاس بالا)، ایجاد یک SqlCommand و اختصاص اون کانکشن به SqlCommand و متدایی دیگه مثه انواع Execute کردن ها و ...

این تا اینجای کار بود....
=====>حالا چندتا ابهام دارم!

من میخوام الان یه کلاس بنویسم واسه انجام کارایی مثله Select و Insert و Update و Delete و البته به هردو روش متصل و غیر متصل!
حالا چندتا سوال دارم:
1- بیام این متدهارو توی کلاس Dbutility به صورت Abstract تعریف کنم و بعد دو کلاس جدا تعریف کنم و این متدها رو یه بار به صورت متصل و یه بار غیر متصل توش پیاده کنم؟
2- بیام این متدهارو توی یه Interface قرار بدم و بعد بیام این دوتا کلاس متصل و غیر متصل رو بنویسم؟
3- اصلا 2 تا کلاس جداشون کنم درسته یا غلط؟
ووووو

4- میدونم که روش اصولی اینکار استفاده از Design Pattern هاست، اما در حد آشنایی مطالعه کردم دربارشون! و دقیق نمیدونم از کدوم الگو باید استفاده کنم واسه انجام این کارا! و چجوری پیاده سازیش کنم
میخواستم اگه امکان داره دوستانی که تجربه ی عملی کار با معماری سه لایه و استفاده از الگوهای طراحی رو دارن راهنماییم کنن، تو اینترنتم زیاد گشتم اما یه چیزه کامل و کاربردی دستگیرم نشده، همه اشون مثالای ناقص و جسته گریخته هستن
این چیزیه که واقعا همه ی مبتدیای مثل من واسه پیشرفت یادگیری بش نیاز داریم
پیشاپیش ممنونم از کمکتون.

پ ن : من قبلا php کار میکردم، و جدیدن اومدم سمت .net یه چند ماهی میشه . مشکلی هم با سی شارپ ندارم و الانم 2 هفته اس mvc رو شروع کردم
خیلی مشتاقم و علاقه دارم اصولی برنامه نویسی کنم و پروژه هام رو حرفه ای کار کنم (نه مثله قدیما...)

SabaSabouhi
چهارشنبه 17 دی 1393, 13:37 عصر
سلام
پیشنهاد می‌کنم از EntityFramework استفاده کنی. شاید برای کارهای خیلی کوچیک یه کم دست و پا گیر به نظر بیاد،
اما چون گمان می‌کنم می‌خوای روی پروژه‌های جدی کار کنی، ارزشش رو داره که این رو یاد بگیری و ازش استفاده کنی.
وقتی رو که می‌خوای روی تولید «Dal قابل استفاده در پروژه‌های دیگه» بگذاری رو بگذار روی یاد گرفتن EF و CodeFirst.
از ترکیب EF و Lambda می‌تونی به راحتی از پس پیچیده‌ترین کارها بر بیای.

صبا صبوحی

ghossein
پنج شنبه 18 دی 1393, 10:01 صبح
سلام
لینک زیر رو ببینید : از دو الگوی Abstract Factory و Singleton استفاده کرده.

http://www.codeproject.com/Articles/30277/Easy-Data-Access-Layer

elec60
پنج شنبه 18 دی 1393, 10:32 صبح
پیشنهاد منم کار با تکنولوژی EF هست.

amin-21
پنج شنبه 18 دی 1393, 14:47 عصر
ممنونم از دوستانی که پاسخ دادند، اما به بعضی از تکنولوژی های ذیل .net احساس عجیبی دارم، شایدم به خاطر php کار بودنه، یه حسی دارم نسبت به اینکه بدون اینکه ما بفهمیم چه خبره مایکروسافت میاد در پشت صحنه کلی کار انجام میده!
این حس رو نسبت به کار کردن با ویزارد واسه کارای مختلف تو ویژوال استودیو و همینطور تا جایی که mvc رو با entity دیدم تو این چند وقت، کار با entity و تولید ویو ها و کارایه یهویی بدون اینکه نقشی توش داشته باشیم، یه ذره ترسناک به نظرم اومده

یه چیز دیگه هم که هست اینه که من قبل از اینکه شروع به برنامه نویسی با سی شارپ کنم! مشغول sql server شدم و بیشتر کارای مربوط به پایگاه داده رو داخل خود sql server انجام میدم
مثه ساخت جدول ها، ویو ها، نوشتن stored procedure ، کد زدن با T-Sql ، کار کردن با تریگر و تقریبا بیشتر کارایی که توی پروژه نیازه با پایگاه داده کار بشه رو تا جایی که مقدور باشه تو همون Sql server انجام میدوم
حالا میخواستم ببینم با این شرایط میشه از entity framework استفاده کرد؟
و اینکه entity framework تضادی با انجام این کارا توی sql server نداره؟

amin-21
پنج شنبه 18 دی 1393, 14:52 عصر
سلام
پیشنهاد می‌کنم از EntityFramework استفاده کنی. شاید برای کارهای خیلی کوچیک یه کم دست و پا گیر به نظر بیاد،
اما چون گمان می‌کنم می‌خوای روی پروژه‌های جدی کار کنی، ارزشش رو داره که این رو یاد بگیری و ازش استفاده کنی.
وقتی رو که می‌خوای روی تولید «Dal قابل استفاده در پروژه‌های دیگه» بگذاری رو بگذار روی یاد گرفتن EF و CodeFirst.
از ترکیب EF و Lambda می‌تونی به راحتی از پس پیچیده‌ترین کارها بر بیای.

صبا صبوحی

ممنونم از دوستانی که پاسخ دادند، اما به بعضی از تکنولوژی های ذیل .net احساس عجیبی دارم، شایدم به خاطر php کار بودنه، یه حسی دارم نسبت به اینکه بدون اینکه ما بفهمیم چه خبره مایکروسافت میاد در پشت صحنه کلی کار انجام میده!
این حس رو نسبت به کار کردن با ویزارد واسه کارای مختلف تو ویژوال استودیو و همینطور تا جایی که mvc رو با entity دیدم تو این چند وقت، کار با entity و تولید ویو ها و کارایه یهویی بدون اینکه نقشی توش داشته باشیم، یه ذره ترسناک به نظرم اومده

یه چیز دیگه هم که هست اینه که من قبل از اینکه شروع به برنامه نویسی با سی شارپ کنم! مشغول sql server شدم و بیشتر کارای مربوط به پایگاه داده رو داخل خود sql server انجام میدم
مثه ساخت جدول ها، ویو ها، نوشتن stored procedure ، کد زدن با T-Sql ، کار کردن با تریگر و تقریبا بیشتر کارایی که توی پروژه نیازه با پایگاه داده کار بشه رو تا جایی که مقدور باشه تو همون Sql server انجام میدوم
حالا میخواستم ببینم با این شرایط میشه از entity framework استفاده کرد؟
و اینکه entity framework تضادی با انجام این کارا توی sql server نداره؟

plus
پنج شنبه 18 دی 1393, 15:25 عصر
ممنونم از دوستانی که پاسخ دادند، اما به بعضی از تکنولوژی های ذیل .net احساس عجیبی دارم، شایدم به خاطر php کار بودنه، یه حسی دارم نسبت به اینکه بدون اینکه ما بفهمیم چه خبره مایکروسافت میاد در پشت صحنه کلی کار انجام میده!
این حس رو نسبت به کار کردن با ویزارد واسه کارای مختلف تو ویژوال استودیو و همینطور تا جایی که mvc رو با entity دیدم تو این چند وقت، کار با entity و تولید ویو ها و کارایه یهویی بدون اینکه نقشی توش داشته باشیم، یه ذره ترسناک به نظرم اومده

یه چیز دیگه هم که هست اینه که من قبل از اینکه شروع به برنامه نویسی با سی شارپ کنم! مشغول sql server شدم و بیشتر کارای مربوط به پایگاه داده رو داخل خود sql server انجام میدم
مثه ساخت جدول ها، ویو ها، نوشتن stored procedure ، کد زدن با T-Sql ، کار کردن با تریگر و تقریبا بیشتر کارایی که توی پروژه نیازه با پایگاه داده کار بشه رو تا جایی که مقدور باشه تو همون Sql server انجام میدوم
حالا میخواستم ببینم با این شرایط میشه از entity framework استفاده کرد؟
و اینکه entity framework تضادی با انجام این کارا توی sql server نداره؟



در مورد سوال تاپیک، این الگوها رو جستجو کنید:
> Repository Pattern
> Unit of Work Pattern
و اگه میخواین در مورد Pattern هایی از این دست مطالعه کنید کتاب Patterns of Enterprise Application Architecture نوشته Martin Fowler رو مطالعه کنید.

در مورد حسی که در کار کردن با تکنولوژی هایی مثل EF یا MVC بهتون دست میده، این حسی که دارین منطقیه. معمولا کار کردن با این سیستم ها روش های خیلی فرمالی داره که کاربر احساس میکنه که خیلی محدود هست.موضوع این هست که هدف ازین تکنولوژی ها، معمولا افزایش Productivity و کاهش زمان تولیده که در مقابل کاهش کنترل شما روی سیستم، اتصال (Coupling) سیستم به این تکنولوژی ها و ایجاد محدودیت ها رو به دنبال داره.این شما هستین که باید بر اساس فاکتورها مختلف انتخاب کنید که آیا لازم هست که ازینها استفاده کنید یا نه.
برای مثال، EF یک ORM یا Object Relational Mapping هست که به شما امکان نگه داری Domain Model رو با حداقل (یا بدون) نوشتن Query های SQL فراهم میکنه و در مقابل کنترل شما رو در این مورد کم میکنه.این شما هستید که باید انتخاب کنید بر اساس زمان، نیرو، توانایی که در اختیار دارین EF برای شما مفید هست یا نه.اگه شما شرکت نرم افزاری ای دارین با تعدادی کارشناس SQL و یک پروژه بزرگ با پیچیدگی های خاص، شاید ترجیح بدین که نوشتن SQL رو به کارشناس ها بسپارید تا اینکه با ORM کار کنید.اگه شما یک برنامه نویس انفرادی هستن و با مشتری هایی که میخوان یک سیستم با کلی امکانات رو در یک ماه با مبلغ ناچیزی براشون انجام بدین، شاید به صرفه نباشه که بخواین دست به SQL بشین و بهتر باشه محدودیت ها رو در ازای Productivity بیشتر قبول کنید.MVC هم پیاده سازی یک الگوی طراحی هست، شما اگه خودتون توانایی و... لازم رو دارین میتونید خودتون پیاده کنید و یا از سیستم آماده استفاده کنید.
در مورد تداخل EF با SQL Server باید مورد به مورد بررسی کنید.تا اونجا که من میدونم خیلی از موارد مثل Stored Procedure ها یا TSQL اختصاصی مشکلی نداره ولی اگه قرار هست شما بیشتر کارتون رو دستی انجام بدین معنی ای در استفاده از EF دیگه نیست، فقط کار خودتون رو زیاد کردین.

SabaSabouhi
شنبه 20 دی 1393, 14:32 عصر
سلام
نه مشکلی وجود نداره. حتا تا این اندازه که می‌تونی به راحتی از sql-command هم استفاده کنی.
یه مدت از EF استفاده کن، بعد ببین وقتی php کار می‌کنی چقدر دلت براش تنگ می‌شه.
فقط اگه می‌خوای از EF استفاده کنی، توصیه اکید می‌کنم که Linq و به ویژه Lambda رو خوب یاد بگیری.

صبا صبوحی

tamdata
چهارشنبه 05 فروردین 1394, 08:02 صبح
استفاده از linq به وسیله کدهای lambda حس عجیبی داره و خیلی لذت بخشه. و به خاطر query های پیچیده ای که میشه باهاش زد شما رو شگفت زده میکنه. حتما امتحان کنید.