-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
من نیز دانلود کردم ،
مشکلات :
نبود لایه Common یا transfer object در لایه بندی .
نحوه پاس دادن مقادیر بین لایه ها اصلا صحیح نیست . (اگر جدولی 20 فیلد داشته باشد یعنی 20 پارامتر )
مشکل در پاس دادن مقدار Null
مقدار بازگشتی خطاها از طریق throw کردن exception نمیباشد .
معماری تا rapid خیلی فاصله داره .
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
دوست عزیز خیلی ممنون از پیشنهاد شما . قرار هست این نمونه به تدریج کامل بشه . و به یک پیاده سازی کامل تبدیل بشه.
نقل قول:
نبود لایه Common یا transfer object در لایه بندی .
نحوه پاس دادن مقادیر بین لایه ها اصلا صحیح نیست . (اگر جدولی 20 فیلد داشته باشد یعنی 20 پارامتر )
مشکل در پاس دادن مقدار Null
لطفا در این باره بیشتر توضیح بدید تا پس از نتیجه گیری نهایی تغییرات رو روی کد اعمال کنیم .
با تشکر
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
البته اين روش پياده سازي در پروژه اي كه عمليات هاي زيادي داره يه خورده دردسر ساز ميشه. مثلاً شايد شما بخوايد عمليات هاي سيستم رو كه قرار هست در BLL پياده سازي بشه رو به صورت Project هاي مختلف در بياريد و هر Project براي خودش Class Libary هاي جداگانه اي داشته باشه. و اون موقع تشخيص BLL ها سخت ميشه. اين مثال براي UIL و DAL هم صدق مي كنه. شايد راه حل پيشنهادي اين باشه كه ClassLibary ها رو در يك Item دسته بندي مي كنيم ولي بازم مشكل ساز ميشه.
به هر حال اينم يك نوع پياده سازي هستش و مثل اينكه جواب هم داده.
نقل قول:
نحوه پاس دادن مقادیر بین لایه ها اصلا صحیح نیست . (اگر جدولی 20 فیلد داشته باشد یعنی 20 پارامتر )
از ArrayList استفاده مي شه.
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
نقل قول:
از ArrayList استفاده مي شه.
ممنون . اگر دوستان نظر دیگه ای دارند خوشحال میشم .
نقل قول:
البته اين روش پياده سازي در پروژه اي كه عمليات هاي زيادي داره يه خورده دردسر ساز ميشه. مثلاً شايد شما بخوايد عمليات هاي سيستم رو كه قرار هست در BLL پياده سازي بشه رو به صورت Project هاي مختلف در بياريد و هر Project براي خودش Class Libary هاي جداگانه اي داشته باشه. و اون موقع تشخيص BLL ها سخت ميشه. اين مثال براي UIL و DAL هم صدق مي كنه. شايد راه حل پيشنهادي اين باشه كه ClassLibary ها رو در يك Item دسته بندي مي كنيم ولي بازم مشكل ساز ميشه.
کاملا با شما موافقم . ولی باید به این نکته توجه کنید که این نمونه خیلی ابتدایی و فقط جهت آموزش است .
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
معمولا در پروژه های بزرگ کلاس هایی مانند Exception ها ، Enum و object های Data (میتواند tds یا ... )باشد .در این لایه قرار میگیرند . و بین پروژه های مختلف رد و بدل میگردند .
TypeDataSet و یا نمونه های معادل آن باعث خوانایی بیشتر سرعت نسبتا بهتر و .... برای ما به بار می آورد .
در همین مورد هم بجای ArrayList ما tds پاس میدیم .
اگر خواستید نمونه بزارم .
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
دوست عزیز اگر میشه بیشتر در TypeDatasetمزایای و کلاس هایی که فرمودید (Exceptionمثل) بیشتر توضیح بدید . ممنون
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
بهتر نیست کانکشن از فایل config دریافت بشه که قابلیت تغییر ساده تری برای کاربر داشته باشه . و یک کلاس جداگانه برای دریافت و ثبت اطلاعات ایجاد بشه تا نیازی به استفاده از کانکشن در همه متدها نباشه . یک متد که sqlcommand به آن پاس داده بشه و نتیجه برگشت داده شود .
متدهای SelectRow و SelectAll مقدار برگشتی از نوع Dataset دارند که میشه این مقادیر را از نوع DataRow و DataTable انتخاب کرد .
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
TypeDataSet
یا TDS ها نوعی از اشیا داده هستند . TypeDataSet های ما از DataSet به ارث میروند .
TypeDataSet
در خودچه چیزی ذخیره میکنند :
مانند
DataSet معمولی در خود جداول ، Relation مربوط به جداول و در کل میتوان گفت ساختار Data ما را در خود جا میدهد . و هر چیزی که در DataSet است در خود دارد . این اطلاعات در Compile time به ما ارایه میگردند نه runtime
چه مزیتی نسبت به
DataSet دارد :
tds
همانطور که گفتم در خود ساختار Data را دارد و لازم نیست در Runtime انها اضافه گردند همچنین با در اختیار قراردادن آن ساختار به ما کمک زیاد در سریعتر نوشتن کدها و خوانایی برنامه به ما میکند و از نظر performance هم وضعیت بهتری دارد .
tds
ها با اضافه کردن Adpter ( Adpater نوعی pattern است . این class ها ابزار های کار با class های دیگر هستند )های مخصوص خود کمک زیادی به ما برای عملیات اصلی بر روی جداول میکند . (بدون نوشتن یک خط کد و همه چیز در Designer انجام میشود) در ضمن این class ها چون partial هستند در فایلهای فیزیکی جداگانه میتوان آنها را توسعه داد .
نحوه ایجاد :
بر روی پروژه کلیک لاست میکنیم و از قسمت
Data گزینه DataSet را انتخاب میکنیم . میتوانیم از منوی view گزینه server explorer را انتخاب و پس از ساخت connection جداول آنرا به tds مان اضافه کنیم . اسم گزاری آن نیز معمولا نام class و انتهای آن DS میباشد مثلا UserDs
استثنا ها :
ما میخواهیم عملکرد کار خود را از یک لایه به لایه دیگر بفهمانیم .
مثلا در عمل اگر موجودی انبار کافی نبود با خطای ذخیره داده فرق میکند و ما میخواهیم این موضوع را به کاربر اعلام کنیم . برای این کار 2 راه داریم متد ما با
return value های مختلف ما را آگاه کند .
مثلا اگر -1 بود برای نبود موجودی کافی و -2 برای خطا در ذخیره سازی مشکل این روش نبود خوانایی آن است .
در روش دوم استثنا های مختلفی را ما ایجاد میکنیم .
مثال :
new InventoryException("item not found");
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
دوستان در پستهای قبلی یه مطلبی رو ذکر کردند که به نظر من اشتباهه
اینکه چند لایه نوشتن برنامه باعث کاهش کدنویسی میشه
که این دقیقا برعکسه
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
نقل قول:
نوشته شده توسط
ezamnejad
بهتر نیست کانکشن از فایل config دریافت بشه که قابلیت تغییر ساده تری برای کاربر داشته باشه . و یک کلاس جداگانه برای دریافت و ثبت اطلاعات ایجاد بشه تا نیازی به استفاده از کانکشن در همه متدها نباشه . یک متد که sqlcommand به آن پاس داده بشه و نتیجه برگشت داده شود .
متدهای SelectRow و SelectAll مقدار برگشتی از نوع Dataset دارند که میشه این مقادیر را از نوع DataRow و DataTable انتخاب کرد .
بهتر است يک لايه با نام COMMON در نظر بگيريم و اطلاعات کانکشن و برخي از توابع مشترک را در آن قرار دهيم تا نياز به چندباره کاري در تعريف کانکشن و توابع مشترک نباشد .
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
نقل قول:
دوستان در پستهای قبلی یه مطلبی رو ذکر کردند که به نظر من اشتباهه
اینکه چند لایه نوشتن برنامه باعث کاهش کدنویسی میشه
که این دقیقا برعکسه
دوست عزیز چه دلیل فانغ کننده ای برای گفته ی خود دارید؟ لطفا" توضیحات بیشری ارائه دهید،/
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
دوست عزيز به اعتقاد من کاهش يا افزايش حجم کد نويسي بستگي مستقيم به نحوه تعريف لايه ها و نيز چگونگي معماري آنها دارد به نحوي که اين لايه بندي در درجه اول باعث کنترل و توسعه ساده تر پروژه گردد و در عين حال از کد نويسي هاي تکراري اجتناب شود . حال آنکه اگر به اين مهم که اساسا هدف از چند لايه کردن پروژه چيست توجه کافي نشود و صرفا بصورت کليشه اي و استاندارد شده با آن برخورد نمود به اعتقاد من نيز ممکن است باعث افزايش حجم کد نويسي و حتي در برخي موارد کاهش خوانايي برنامه گردد. به همين خاطر در گذشته در همين تاپيک درخواست نمودم که بحث را از پست 37# مجددا پي بگيريم تا تعريف عملي دقيقتري نسبت به تعيين لايه ها در يک پروژه کاربردي دست دهد که متاسفانه اين پست من توسط مديريت محترم حذف گرديد .
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
نقل قول:
تعريف عملي دقيقتري نسبت به تعيين لايه ها در يک پروژه کاربردي دست دهد که متاسفانه اين پست من توسط مديريت محترم حذف گرديد .
من فکر میکنم هدف این تاپیک نیز همین است .
من فقط مشکلی که هنوز میبینم ما بایستی ابتدا نسخه مورد استفاده در framework را تعیین کنیم بعد به سراغ layering بریم .
مثلا linq لایه بندی را تغییر داد .
من آماده همکاری فنی در این زمینه هستم فقط میگم قبلش مشخص بشه با Ds قرار کار بشه یا linq یا ا custome collection ها و یا تحت معماری NHibernate یا ... است . بعد شروع کنیم .
و به نظر من خیلی احمقانه است ما لایه بندی را در این 3 لایه فقط ببینیم.
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
نقل قول:
نوشته شده توسط
esmaeily-hosein
معمولا در پروژه های بزرگ کلاس هایی مانند Exception ها ، Enum و object های Data (میتواند tds یا ... )باشد .در این لایه قرار میگیرند . و بین پروژه های مختلف رد و بدل میگردند .
TypeDataSet و یا نمونه های معادل آن باعث خوانایی بیشتر سرعت نسبتا بهتر و .... برای ما به بار می آورد .
در همین مورد هم بجای ArrayList ما tds پاس میدیم .
اگر خواستید نمونه بزارم .
با سلام
من خواهش ميکنم که نمونه اي در اين رابطه ارائه کنيد تا درباره آن نيز مختصري بحث کنيم تا پس از آن شايد راه حلي ساده تر براي لايه بندي در پروژه هاي بزرگ دست دهد :متفکر:
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
کسی از دوستان به تاثیر لایه بندی بر روی coupling اشاره نکرد. معمولا لایه ها را طوری در نظر می گیرند که کلاس های لایه های پایین هیچ اطلاعی درباره ی کلاس های استفاده کننده در لایه های بالاتر ندارند.
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
نقل قول:
نوشته شده توسط
bTajahmadi
کسی از دوستان به تاثیر لایه بندی بر روی coupling اشاره نکرد. معمولا لایه ها را طوری در نظر می گیرند که کلاس های لایه های پایین هیچ اطلاعی درباره ی کلاس های استفاده کننده در لایه های بالاتر ندارند.
پست 29 https://barnamenevis.org/showth...=151744&page=3
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
دوستان قرار نیست از اول یه معماری خیلی قدرتمند طراحی کنیم...
می خوایم پله پله بریم بالا...
بزارید یه شمه ی کاملی از پروژه آماده بشه، تا یه جای خوبی پیش بره، بعد کم کم به نواقصش می پردازیم و اونها رو برطرف می کنیم...
اگر هر کسی بیاد و یه معماری قدرتمند مطرح کنه، دیگه اساس موضوع تاپیک از طرح خارج میشه، چرا که هر طرحی مزایا و معایب خودش رو داره...
پس بزارید روی همون روالی که iroonidotnet شروع کرده تمرکز کنیم و با همون روند پیش بریم تا کم کم اون رو ارتقاء بدیم و نواقصش رو رفع کنیم نه که از اول به همه فرض ها هجوم ببریم که این اشتباهه و فلانه و بیسار...
با تشکر
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
دوست عزيز
من هم معتقدم که بايد بحث از يک روال مشخص تبعيت کنه ولي نظر من اين است که اول بايد به نحوه طراحي معماري و تعريف لايه ها به خوبي پرداخته شود و پس از آن به سراغ کد نويسي برويم چرا که :
خشت اول گر نهد معمار کج
تا ثريا مي رود ديوار کج
به هر حال اينم نظر منه ...
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
سلام
می خواستم بدونم که اعمالی مثل Transaction رو در کد.م لایه باید پیاده سازی کرد و چطور به کاربر
اطلاع بدیم؟؟؟؟
با تشکر
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
Transaction چون جزء فعاليت هاي DB است بايستي در DataLayer مديريت شود
اطلاعات Master و Detail بايستي به DataLayerجهت درج Transactional پاس شود
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
نقل قول:
Transaction چون جزء فعاليت هاي DB است بايستي در DataLayer مديريت شود
اطلاعات Master و Detail بايستي به DataLayerجهت درج Transactional پاس شود
البته به جای اعمال TransAction در DAL میشه تمام TransAction ها رو به Database فرستاد و در سمت Database اونها رو مدیریت کنیم !
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
همانطور که می دانیید،هر فرم بصورت پیش فرض چند فایل به نام های:Form1.Designer.cs
Form1.resx
Form1.cs
مورد بحث من Reversi.Designer.cs می باشد.
آیا استفاده از نام دامنه های
System.Windows.Forms
- System.Drawing
- System.Data
در این فایل جهت ساختن اجزای گرافیکی فرم،جزو قوانین چند لایه ای می باشد یا خیر؟
یعنی ما مجازیم توابع ای که کار ساختن گرافیک برنامه را دارند، در این فایل پیاده سازی کنیم ؟
ممنون،
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
نقل قول:
نوشته شده توسط
aminsharifi67
همانطور که می دانیید،هر فرم بصورت پیش فرض چند فایل به نام های:
Form1.Designer.cs
Form1.resx
Form1.cs
مورد بحث من Reversi.Designer.cs می باشد.
آیا استفاده از نام دامنه های
System.Windows.Forms
- System.Drawing
- System.Data
در این فایل جهت ساختن اجزای گرافیکی فرم،جزو قوانین چند لایه ای می باشد یا خیر؟
یعنی ما مجازیم توابع ای که کار ساختن گرافیک برنامه را دارند، در این فایل پیاده سازی کنیم ؟
ممنون،
خیر جزو قوانین چند لایه ای نمی باشد.برای کسی که بیشتر با asp.net کار کرده است.شاید این ابهام پیش بیاید که در win32 هم اینگونه است.ولی وقتی با خطای load فرم مواجه می شوید،این شبه برطرف می شود.نمی دانم شاید این یکی از مشکلات win32 در پیاده سازی چند لایه ای بوده است.
به هر حال با جایگزین شدن xaml چند لایه ای شدن مفهوم بهتری را گرفته است.
پیروز باشید.
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
با سلام خدمت دوستان عزیز
در برنامه نویسی ساخته یافته من برای اینکه یک textbox را Bindکنم از کد زیر استفاده میکردم(این کار را برای وقتی که می خواستم که وقتی کاربر بر روی یک رکورد در datagrid کلیک میکرد اطلاعات آن در textbox ها هم نشون داده بشه انجام میدادم)
TextBox1.DataBindings.Add(New Binding("text", dv, "id_a"))
الان که دارم برنامه نویسی 3 لایه کار میکنم فکر کنم باید این کد را در لایهDAL قرار دهم ولی اینجا این مشکل است چون لایه DAL من از نوعClassLibrary است واصلاً من در لایه DAL خودم نباید با اشیا لایهUI کار کنم این کد را چگونه و کجا بنویسم
با تشکر فراوان
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
نقل قول:
نوشته شده توسط
mohsen_zelzela00
واصلاً من در لایه DAL خودم نباید با اشیا لایهUI کار کنم این کد را چگونه و کجا بنویسم
با تشکر فراوان
درسته ، در dal که هیچی در bll هم نباید این کار رو بکنی.
دقیقا حضور ذهن ندارم ولی اگه بگی رکورد ها رو چطوری پاس میدی به لایه ui ممکنه بتونم کمکت کنم، در ضمن شما میتونید پروپرتی های آبجکت های مختلف رو به هم bind کنید یعنی binding فقط به منبع داده مرتبط نیست.
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
نقل قول:
نوشته شده توسط
majid325
.
دقیقا حضور ذهن ندارم ولی اگه بگی رکورد ها رو چطوری پاس میدی به لایه ui ممکنه بتونم کمکت کنم، در ضمن شما میتونید پروپرتی های آبجکت های مختلف رو به هم bind کنید یعنی binding فقط به منبع داده مرتبط نیست.
با استفاده از لیست generic انجام میدم شبیه اونی که در قسمت linq شما به پست من جواب دادید ممنون میشم کمکم کنید.......!
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
نمیدونم روی روند تاپیک تاثیر مثبت میزاره یا منفی.
با توجه به هدف کد پست 74
TextBox1.DataBindings.Add("Text", DataGrid1.DataSource, DataGrid1.Columns[0].Name );
کد فوق رو تست نکردم اگه جواب نداد باید Interface مورد نظر (الان حضور ذهن ندارم) رو تو listپیاده سازی کنی.
اگه از linq استفاده میکنی که binding راحت تره...
-
1 ضمیمه
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
یه نمونه از معماری 3لایه رو که بر پایه list پیاده سازی شده رو میزارم که بشه Performance با نمونه dataset ی مقایسه کرد ....
البته در روز های آتی سعی میکنم کامل ترش کنم.
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
- ساخت لایه دسترسی به داده ها (Data Access Layer)
- ساخت لایه تعریف داده ها (Common Data Definition)
- لایه نمای کاربر (Presentation)
- لایه قوانین سیستم (Business Rules)
توی لیست درسای آقای کرامتی بود
درباره دومی میشه توضیح بدید
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
نقل قول:
نوشته شده توسط
m0rteza
- ساخت لایه دسترسی به داده ها (Data Access Layer)
- ساخت لایه تعریف داده ها (Common Data Definition)
- لایه نمای کاربر (Presentation)
- لایه قوانین سیستم (Business Rules)
توی لیست درسای آقای کرامتی بود
درباره دومی میشه توضیح بدید
به نظر می رسند اقای کرامتی برای دو گروه کلی دستورات sql (DDl,DML) دو لایه ارتباطی در نظر گرفته اند
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
داد های که توسط ما تعریف میشن و در بین لایه ها مشترک هستن در این لایه تعریف میشن ،
مثل enum ها یا Exception و مواردی از این قبیل.
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
حالا سوائلی که برام پیش امده اینه که وقتی متد GetData رو که در کلاس data در لایه bll به صورت زیر پیاده سازی شده :
private static List<Book> GetBooks(OleDbDataReader reader)
{
List<Book> tempBookList = new List<Book>();
while (reader.Read())
{
try
{
Book tempBook = new Book {ID = (int)reader["ID"],ISBN = reader["ISBN"].ToString(), Publisher = reader["Publisher"].ToString(), Title = reader["Title"].ToString(), Author = reader["Author"].ToString() };
tempBookList.Add(tempBook);
}
catch(Exception ex)
{
throw new Exception(ex.Message);
}
}
return tempBookList;
}
تناقضی که پیش میاد اینه که پارامتر reader رو ازنوع oledb تعریف کردم که اگه مجبور بشم لایه dal رو به sql تغییر بدم باید لایه bll رو هم تغییر بدم!!!!!!!!
راه حل دوستان چیه؟
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
از IDataReader استفاده کن.
موفق باشید.
-
1 ضمیمه
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
با کمی تغییرات ، لطفا اشکالات فنی رو عنوان کنید.
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
راستی برای Dynamic Query با توجه با اینکه اسامی فیلدها نباید در Presentation عنوان بشه چیکار باید کرد؟
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
نقل قول:
نوشته شده توسط majid325
راستی برای Dynamic Query با توجه با اینکه اسامی فیلدها نباید در Presentation عنوان بشه چیکار باید کرد؟
ساختار دیتابیس (Schema) رو در یک فایل XML ذخیره کن و با XML Deserialization به شی تبدیل و
بخونش.
موفق باشید.
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
نقل قول:
ساختار دیتابیس (Schema) رو در یک فایل XML ذخیره کن و با XML Deserialization به شی تبدیل و
بخونش.
بله درسته، در Visual Studio 2008 SP1 مایکروسافت نسخه جدیدی از فن آوری Ado.net رو ارائه داد به نام Ado.Net Entity Framework یا EF که میاد یک لایه ی دیگه بین لایه های نرم افزارتون اضافه میکنه به نام Conceptual Layer که کارش دقیقا همان چیزی هست که بهروز جان گفت، ساختار و اسکیمای دیتابیس شما رو در یک فایل Xml ذخیره میکنه، بنابراین نرم افزار شما مستقل از ساختار دیتابیس میشه و چنانچه تغییراتی در ساختار دیتابیس ایجاد کنید، نیازی به کامپایل مجدد برنامه ندارید بلکه فقط کافیه تغییرات مورد نظر رو در اون فایل Xml منعکس کنید.
در دات نت 4، این فن آوری به نسخه 4 ارتقا پیدا کرده و تغییرات اساسی فراوانی روش منعکس شده، اطلاعات بیشتر.
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
نقل قول:
نوشته شده توسط
Behrouz_Rad
ساختار دیتابیس (Schema) رو در یک فایل XML ذخیره کن و با XML Deserialization به شی تبدیل و
بخونش.
موفق باشید.
با تشکر ، پیرو راهنمایی شما فعلا دارم دنبال یه Convert mdb to XML Schema ٰTools میگردم که free هم باشه .
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
نقل قول:
نوشته شده توسط
hdv212
بله درسته، در Visual Studio 2008 SP1 مایکروسافت نسخه جدیدی از فن آوری Ado.net رو ارائه داد به نام Ado.Net Entity Framework یا EF که میاد یک لایه ی دیگه بین لایه های نرم افزارتون اضافه میکنه به نام Conceptual Layer که کارش دقیقا همان چیزی هست که بهروز جان گفت، ساختار و اسکیمای دیتابیس شما رو در یک فایل Xml ذخیره میکنه، بنابراین نرم افزار شما مستقل از ساختار دیتابیس میشه و چنانچه تغییراتی در ساختار دیتابیس ایجاد کنید، نیازی به کامپایل مجدد برنامه ندارید بلکه فقط کافیه تغییرات مورد نظر رو در اون فایل Xml منعکس کنید.
در دات نت 4، این فن آوری به نسخه 4 ارتقا پیدا کرده و تغییرات اساسی فراوانی روش منعکس شده، ا
طلاعات بیشتر.
من هر چی سعی کردم نتونستم Provider رو برای oledb تغییر بدم ، ظاهرا فقط با ms sql رابطه برقرار میکنه.
اگه غیر از این است لطفا راهنمایی کنید.
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
نقل قول:
نوشته شده توسط
majid325
فعلا دارم دنبال یه Convert mdb to XML Schema ٰTools میگردم که free هم باشه .
وقتی دیتابیس ساخته شد می توان بوسیله همون sql هم ، Schema را دید.
فکر کنم اگر dataset رو هم bind کنی،و با writexml میشه به Schema دست یافت.(توی برخی جاه هایی که محدودیت MDB داریم،می تونیم از write و read کردن xml عملکرد پایگاه داده را تا حدودی داشت،البته با این قابلیت یعنی می توان به همان قابلیت MDB رسید؟)
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
نقل قول:
نوشته شده توسط
aminsharifi67
وقتی دیتابیس ساخته شد می توان بوسیله همون sql هم ، Schema را دید.
فکر کنم اگر dataset رو هم bind کنی،و با
writexml میشه به Schema دست یافت.(توی برخی جاه هایی که محدودیت MDB داریم،می تونیم از write و read کردن xml عملکرد پایگاه داده را تا حدودی داشت،البته با این قابلیت یعنی می توان به همان قابلیت MDB رسید؟)
مشکل اینه که از dataset استفاده نمیکنم و بانکم هم همونطور که گفتید mdb.
اگه یکی از دوستان زحمت بکشه و روشی که اقای راد پیشنهاد داده رو روی نمونه فوق پیاده سازی بکنه خیلی خوب میشه.
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
من همیشه برای پروژه هام از این روش استفاده می کنم.
Schema ی دیتابیس رو مثلاً بدین شکل در فایل XML ذخیره کن:
<?xml version="1.0" encoding="utf-8" ?>
<TvtoDBSchema>
<Entities>
<Member name="tblMember">
<UserId>UserId</UserId>
<UserName>UserName</UserName>
<Pass>Pass</Pass>
<Email>Email</Email>
<InsertDate>InsertDate</InsertDate>
<UpdateDate>UpdateDate</UpdateDate>
</Member>
</Entities>
<SProc>
<GetMembers>GetMembers</GetMembers>
<InsertRole>InsertRole</InsertRole>
<InsertUser>InsertUser</InsertUser>
<UpdateUser>UpdateUser</UpdateUser>
</SProc>
</TvtoDBSchema>
وقتی که فایل با محتویات فوق در VS باز و انتخاب هست، از منوی XML گزینه ی Create Schema رو انتخاب کن. در این حالت، فایل XSD متناظر با فایل XML به طور خودکار تولید و نمایش داده میشه. اون رو ذخیره کن. حال فایل XSD رو به ابزار xsd که در SDK دات نت وجود داره به شکل ذیل پاس بده:
C:\XSD.exe myFile.xsd /c
یک فایل cs تحویل میگیری که حالت میانه ی شی گونه ی فایل XML هست که باید با XML Deserialization به شکل ذیل اون رو نهایی کنی:
public static TvtoDBSchema GetFieldNames(string schemaFilePath)
{
XmlSerializer xs = new XmlSerializer(typeof(TvtoDBSchema));
using (XmlReader xr = XmlReader.Create(schemaFilePath))
{
return (TvtoDBSchema)xs.Deserialize(xr);
}
}
حال به شکل ذیل به نام فیلد می تونی دسترسی داشته باشی:
MyClass.GetFieldNames("myFile.xml").SProc.GetMembe rs;
جالب بود. نه؟ ;)
موفق باشید.
پ.ن:
1) نحوه ی نگهداری Schema ی دیتابیس بستگی به نیازت و نوع پروژت داره. ممکنه نیاز باشه JOIN ها رو هم ذخیره کنی. این بستگی به خودت داره.
2) می تونی متد GetFieldNames رو private کنی و یک متد public با نام GetFieldName ایجاد کنی که GetFieldNames رو فراخوانی می کنه تا نیاز نباشه مدام مسیر فایل XML رو بنویسی.
موفق باشید.
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
نقل قول:
نوشته شده توسط
hdv212
ساختار و اسکیمای دیتابیس شما رو در یک فایل Xml ذخیره میکنه، بنابراین نرم افزار شما مستقل از ساختار دیتابیس میشه و چنانچه تغییراتی در ساختار دیتابیس ایجاد کنید، نیازی به کامپایل مجدد برنامه ندارید بلکه فقط کافیه تغییرات مورد نظر رو در اون فایل Xml منعکس کنید.
میشه یکی از دوستان راجع به این قسمت بیشتر توضیح بده؟
نقل قول:
چنانچه تغییراتی در ساختار دیتابیس ایجاد کنید، نیازی به کامپایل مجدد برنامه ندارید
یعنی ما لایه های برنامه رو به صورت dynamic بسازیم؟
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
خیلی خیلی جالب بود ، من تونستم تمام مراحل به انجام برسونم ، فقط چند تا سوال :
فایل CS تولید شده در چه لایه ای باید تعریف بشه ؟
میشه از Cs تولید شده به جای Bll استفاده کرد؟ یا باید در کنار کلاس هاس bll مون ازش استفاده بکنیم؟
آیا در این روش با اون قسمت از گفته دوستمون hdv212 که در پست قبل ضمیمه کردم رابطه ای هست؟
نقل قول:
نوشته شده توسط
Behrouz_Rad
<SProc>
<GetMembers>GetMembers</GetMembers>
<InsertRole>InsertRole</InsertRole>
<InsertUser>InsertUser</InsertUser>
<UpdateUser>UpdateUser</UpdateUser>
</SProc>
قسمت فوق مربوط به sp ذخیره شده تو دیتابیس هست؟
public static TvtoDBSchema GetFieldNames(string schemaFilePath)
{
XmlSerializer xs = new XmlSerializer(typeof(TvtoDBSchema));
using (XmlReader xr = XmlReader.Create(schemaFilePath))
{
return (TvtoDBSchema)xs.Deserialize(xr);
}
}
متد فوق رو در چه کلاسی تعریف کنم؟
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
نقل قول:
نوشته شده توسط majid325
فایل CS تولید شده در چه لایه ای باید تعریف بشه ؟
میشه از Cs تولید شده به جای Bll استفاده کرد؟ یا باید در کنار کلاس هاس bll مون ازش استفاده بکنیم؟
هیچ لایه! اینجور تصور نکن که حتماً کلاسی باید در لایه ای خاص تعریف بشه...! مثلاً کلاسی که Helper هست، لایه بودن در مورد اون معنا نداره.
پوشه ای با نام Schema بساز و فایل رو در اون قرار بده.
نقل قول:
نوشته شده توسط majid325
آیا در این روش با اون قسمت از گفته دوستمون hdv212 که در پست قبل ضمیمه کردم رابطه ای هست؟
منظور ایشون هم همین روش بود که Entity Framework ازش پیروی می کنه. همین حالت رو به شکل دیگه ای در فایل dbml ای که LINQ to SQL ایجاد می کنه هم شاهد هستی.
نقل قول:
نوشته شده توسط majid325
قسمت فوق مربوط به sp ذخیره شده تو دیتابیس هست؟
بله.
نقل قول:
نوشته شده توسط majid325
متد فوق رو در چه کلاسی تعریف کنم؟
در یک کلاس Helper.
موفق باشید.
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
نقل قول:
نوشته شده توسط
Behrouz_Rad
حال به شکل ذیل به نام فیلد می تونی دسترسی داشته باشی:
MyClass.GetFieldNames("myFile.xml").SProc.GetMembe rs;
با تشکر از حوصله ای که بخرج میدین .
ببخشید بنا به توضیحات شما متد بالا فقط نام یه sp هست و برای بدست اوردن نام فیلد ها باید از یه همچین متدی استفاده بشه؟
MyClass.GetFieldNames("myFile.xml").Entities.Membe r.UserId;
نقل قول:
نوشته شده توسط
Behrouz_Rad
پوشه ای با نام Schema بساز و فایل رو در اون قرار بده.
پوشه Schema رو تو Root سولشن ایجاد کنم؟
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
نقل قول:
نوشته شده توسط majid325
بنا به توضیحات شما متد بالا فقط نام یه sp هست و برای بدست اوردن نام فیلد ها باید از یه همچین متدی استفاده بشه؟
بله.
نقل قول:
نوشته شده توسط majid325
پوشه Schema رو تو Root سولشن ایجاد کنم؟
بله. و حتما Namespace های مناسب رو برای فایل های پروژت انتخاب کن. مثلاً همین فایل cs رو در Namespace ای با نام MyProject.Schema قرار بده.
موفق باشید.
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
نمیدونم چرا سوالهای که برام پیش میاد تو reSerch هام به جوابشون نمیرسم !!!!!
خیلی ممنون ، اگه فایل cs رو توی پوشه خارج از پروژه تعریف کنم دیگه نمیتونم از رفرنس اون توی پروژه مقصدم استفاده کنم!
من در لایه Presentation طبق روال قبل فیلد هایی رو که در Dynamic Query شرکت باید بکنند رو متوجهشون بشم و اسامیشون رو از داخل فایل xml بیرون بکشم و یک string حاوی Dynamic Query به لایه bll پاس بدم؟
از روش فوق میشه در هر لایه که نیاز به کوئری بود استفاده کرد؟
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
نقل قول:
نوشته شده توسط majid325
اگه فایل cs رو توی پوشه خارج از پروژه تعریف کنم دیگه نمیتونم از رفرنس اون توی پروژه مقصدم استفاده کنم!
خارج از پروژه؟ در داخل پروژه قرار بده! من پروژت رو الان دانلود کردم و دیدم از چند پروژه تشکیل شده. منظور من این بود که فایل cs رو در داخل پروژه قرار بده. بیرون بودن از Solution معنا نداره.
نقل قول:
نوشته شده توسط majid325
من در لایه Presentation طبق روال قبل فیلد هایی رو که در Dynamic Query شرکت باید بکنند رو متوجهشون بشم و اسامیشون رو از داخل فایل xml بیرون بکشم و یک string حاوی Dynamic Query به لایه bll پاس بدم؟
بله. در SQL Server از استورد پروسیجر سیستمی sp_executesql برای اجرای کوئری های داینامیک استفاده کن.
نقل قول:
نوشته شده توسط majid325
از روش فوق میشه در هر لایه که نیاز به کوئری بود استفاده کرد؟
بله.
موفق باشید.
-
نقل قول: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)
نقل قول:
نوشته شده توسط
Behrouz_Rad
خارج از پروژه؟ در داخل پروژه قرار بده! من پروژت رو الان دانلود کردم و دیدم از چند پروژه تشکیل شده. منظور من این بود که فایل cs رو در داخل پروژه قرار بده. بیرون بودن از Solution معنا نداره.
موفق باشید.
با توجه به اینکه من به اسامی فیلدها در سه لایه (سه پروژه)احتیاج دارم , در هر پروژه این فایل cs رو تعریف کنم یا یک پروژه چهارمی در نظر بگیرم و تو اون تعریفش کنم؟