PDA

View Full Version : طراحي برنامه اي بدون ديتا بيس



saed2006
یک شنبه 10 مهر 1390, 12:54 عصر
سلام
داده هاي برنامه من جايي ذخيره نميشن توي خود برنامه ايجاد و استفاده ميشن
براي كار با اين ساختار دو روش هست
يكي كلاس بسازم و پروپرتي ها رو توش بريزم و بعد ابجكت بسازم و اضافه كنم تو ليست و اين ليست كار همون جدول رو ميكنه كه اين طوري يه خورده با ليست ها بايد كار كنم كه سخت ميشه
راه ديگه هم اينه جدول ها يي توي رم ايجاد كنم و با اونا كار كنم
يعني با لينكيو
روش راحت تر كدومه؟

mehran_sh_t
یک شنبه 10 مهر 1390, 13:07 عصر
اگر LINQ رو بلدید، به نظر میاد راحت تر باشه (من خودم بلد نیستم زیاد، واسه همین احتمالا از لیست و ... استفاده می کردم تو همچین شرایطی)

saed2006
یک شنبه 10 مهر 1390, 13:24 عصر
خب يعني يه جدول توي فايل dbml بسازم و همه كار ها رو با اون انجام بدم
فرض كنيد هزاران سطر رو بخوام اضافه كنم توي جدول
قبلا همه رو توي يه ليست اضافه ميكردم اما الان اگر با dbml كار كنم مجبورم تك تك اونا رو اضافه كنم به جدولي كه توي Linq ساختم سوالم اينه ايا اينطوري سرعت برنامه گرفته نميشه؟

saed2006
یک شنبه 10 مهر 1390, 13:46 عصر
linq ارتباط چند به يك رو پشتيباني ميكنه؟

mehdi.mousavi
یک شنبه 10 مهر 1390, 13:48 عصر
خب يعني يه جدول توي فايل dbml بسازم و همه كار ها رو با اون انجام بدم فرض كنيد هزاران سطر رو بخوام اضافه كنم توي جدول قبلا همه رو توي يه ليست اضافه ميكردم اما الان اگر با dbml كار كنم مجبورم تك تك اونا رو اضافه كنم به جدولي كه توي Linq ساختم سوالم اينه ايا اينطوري سرعت برنامه گرفته نميشه؟

سلام.
قبل از هر چیز، LINQ to SQL (و در نتیجه DBML ها) رو فراموش کنید (بدین دلیل (http://barnamenevis.org/showthread.php?306833-LINQ-%D8%A8%D9%87%D8%AA%D8%B1-%D8%A7%D8%B3%D8%AA-%DB%8C%D8%A7-ADO.NET&p=1347336#post1347336)) و از Entity Framework استفاده کنید. اما سوال اصلی، فرض کنید این In-Memory Data ها رو به هر شکل و شمایلی در برنامه نگهداری کردید، آیا در نهایت نباید این داده ها جایی Persist بشن؟ چون بالاخره با اتمام Process این برنامه، داده ها در صورتیکه فقط در Memory باشن از بین خواهند رفت... بنابراین اگر به هر دلیلی باید این داده ها رو Persist کنید، توصیه می کنم مدیریت اونها رو به یک DBMS بسپرید. اما اگر نیازی به Persist کردن اون داده ها ندارید، باز هم می تونید با استفاده از Entity Framework، مدلی برای داده های مورد نظرتون بسازید و توسط یک In-Memory Provider برای EF، داده ها رو در حافظه نگهداری کنید (بطور مثال SQLite از In-Memory Table ها پشتیبانی میکنه). البته شما ساز و کاری به اسم DataSet ها نیز دارید، که نگهداری داده ها رو بصورت Disconnected میسر کرده و نمی تونید اونو نیز نادیده بگیرید.

موفق باشید.

saed2006
یک شنبه 10 مهر 1390, 14:08 عصر
داده ها جايي ذخيره نميشن
خب من با ابزار uml موجوديت ها و متد ها ي وابسته به اونها رو كشيدم
الان يه ابزار خوب ميخوام كه به صورت دياگرام مانند كلاس ها و متد هاي اون ها رو به سي شارپ منتقل كنم
كار با linq خيلي راحته اگر با ابزاي كه شما ميگيد كار كنم مجبورم دستورات select و يا هر دستور كار با داده را به صورت string بنويسم؟
با توجه به اينكه برنامه من اصلا داده هاش جايي ذخيره نميشن باز هم اين روش رو توصيه ميكنيد؟
چگونه اساني كار با linq را فداي اين ابزار ميشه كرد ايا اين ابزار هم راه هاي ساده دارد؟
چون من هيچ اطلاعاتي در اين مورد ندارم
ضمن اينكه استاد موسوي سواال اول من رو پاسخ ندادين ساختن كلاس و ايجاد ابجكت ها و ذخيره اون ها داخل ليست بهتره يا استفاده از يه جدول با هر ابزاري
ممنون

gwbasic
یک شنبه 10 مهر 1390, 14:08 عصر
استفاده از DataSet و DataTable اصلا توصیه نمی شه و نمی دونم چرا می گین کار با class سخته؟!!
بهترین راه و راحت ترین راه برای شما استفاده از کلاس هست. حتی برای برنامه هایی که با DataBase کار می کنن دیگه استفاده از DataSet و DataTAble منسوخ شده و فلسفه اومدن ORM ها هم اینه که دیگه سمت برناممون با object ها سروکار داشته باشیم که کار کردن باهاشون راحتتره.
پس شما شک نکنید که باید از class برای تعریف موجودیت هاتون کمک بگیرین

saed2006
یک شنبه 10 مهر 1390, 14:12 عصر
استفاده از DataSet و DataTable اصلا توصیه نمی شه و نمی دونم چرا می گین کار با class سخته؟!!
بهترین راه و راحت ترین راه برای شما استفاده از کلاس هست. حتی برای برنامه هایی که با DataBase کار می کنن دیگه استفاده از DataSet و DataTAble منسوخ شده و فلسفه اومدن ORM ها هم اینه که دیگه سمت برناممون با object ها سروکار داشته باشیم که کار کردن باهاشون راحتتره.
پس شما شک نکنید که باید از class برای تعریف موجودیت هاتون کمک بگیرین

سخته چون مجبوري براي ايجاد جدولي كه سطر ها داخلش ذخيره ميشن همش از ساختار هاي List استفاده كني
خب جدول ساختار ليست رو داخل خودش داره
اما اينكه چجوري ef كار رو راحت تر ميكنه هيچ اطلاعاتي در موردش ندارم

gwbasic
یک شنبه 10 مهر 1390, 14:47 عصر
سخته چون مجبوري براي ايجاد جدولي كه سطر ها داخلش ذخيره ميشن همش از ساختار هاي List استفاده كني
خب جدول ساختار ليست رو داخل خودش داره
اما اينكه چجوري ef كار رو راحت تر ميكنه هيچ اطلاعاتي در موردش ندارم

سختی شو که من متوجه نشدم اگه می تونید مثال دقیق تر بزنید که چه چیزی با DataTable راحته و با لیستی از اشیاء کار کردن سخته
اما ef جدا از مسئله هندل کردن ذخیره داده ها در DB ، ساختاری رو که سمت Client ایجاد می کنه همون class ها هست که شما دستتون در مورد داشتن قابلیت های Object Oriented بازه.

mohsencom
یک شنبه 10 مهر 1390, 15:15 عصر
جناب gwbasic

میشه لطف کنید بگید چرا استفاده از Dataset و Datatable منسوخ شده؟؟؟

آیا شما منظورتون از استفاده از کلاس همون معماری سه لایه هست؟ شما چه راهی رو برای ارتباط با دیتابیس پیشنهاد میکنید؟

اگه میشه یه توضیحی در این مورد بدید و اگه منبعی در این مورد سراغ دارید ذکر کنید...تشکر

gwbasic
یک شنبه 10 مهر 1390, 15:51 عصر
جناب gwbasic

میشه لطف کنید بگید چرا استفاده از Dataset و Datatable منسوخ شده؟؟؟

آیا شما منظورتون از استفاده از کلاس همون معماری سه لایه هست؟ شما چه راهی رو برای ارتباط با دیتابیس پیشنهاد میکنید؟


اگه میشه یه توضیحی در این مورد بدید و اگه منبعی در این مورد سراغ دارید ذکر کنید...تشکر


ساختار database یه ساختار Relational هست که برای ذخیره داده مفید هست ولی ما موقع کد نویسی می خوایم که از مفاهیم و قابلیت های شی گرایی استفاده کنیم مثل inheritance که DataSet این امکانو به ما نمی ده چون همون ساختار database رو داره برای ما شبیه سازی می کنه
بحث چند لایه ربطی به این مسئله نداره چون Data Transfer Object مون می تونه DataSet هم باشه

mohsencom
یک شنبه 10 مهر 1390, 18:37 عصر
ساختار database یه ساختار Relational هست که برای ذخیره داده مفید هست ولی ما موقع کد نویسی می خوایم که از مفاهیم و قابلیت های شی گرایی استفاده کنیم مثل inheritance که DataSet این امکانو به ما نمی ده چون همون ساختار database رو داره برای ما شبیه سازی می کنه
بحث چند لایه ربطی به این مسئله نداره چون Data Transfer Object مون می تونه DataSet هم باشه

منظور شما اینه که از مفاهیم Dataset و DataTable کوچ کنیم و بریم به سمت مفاهیم ORM و استفاده از Entity Framework؟؟؟
آیا برنامه هایی که با این قابلیت جدید نوشته میشن سرعت و Performance برنامه رو بهتر از قبل میکنند؟ گذشته از سادگی در نوشتن کد چه مزیتی دارتد؟
چون خودم تازه میخوام با این مفاهیم آشنا بشم میپرسم و دلیلش هم اینه که میخوام برنامه هام سرعت و Performance بهتری نسبت به قبل داشته باشند

سپاسگذارم از راهنماییتون

gwbasic
یک شنبه 10 مهر 1390, 19:21 عصر
منظور شما اینه که از مفاهیم Dataset و DataTable کوچ کنیم و بریم به سمت مفاهیم ORM و استفاده از Entity Framework؟؟؟
آیا برنامه هایی که با این قابلیت جدید نوشته میشن سرعت و Performance برنامه رو بهتر از قبل میکنند؟ گذشته از سادگی در نوشتن کد چه مزیتی دارتد؟
چون خودم تازه میخوام با این مفاهیم آشنا بشم میپرسم و دلیلش هم اینه که میخوام برنامه هام سرعت و Performance بهتری نسبت به قبل داشته باشند

سپاسگذارم از راهنماییتون

حتما استفاده از ORM‌می تونه مفید باشه اما در کل استفاده از ORM و کد نویسی به صورت چند لایه روی Performance‌تاثیر منفی می ذاره اما بخاطر مزایای که داره استفاده می شه ORM کار با DB رو راحت می کنه و کد نویسی رو کمتر و چند لایه نوشتن باعث تقسیم منطقی برنامه به چند بخش مجزا می شه که می تونه در نگهداری کد و درک و برسی کد در آینده به ما کمک زیادی بکنه.
در کل وقتی که شما در سطح High Level می خواین برنامه نویسی کنید دیگه نباید خودتونو در گیر مثلا نوشتن لایه DataAccess‌بکنین باید سعی بشه از ایزار هایی که افراد حرفه ای نوشتن استفاده کنین که هم خوب تست شده هم قابل اعتماده و بیشتر ذهن برنامه نویس باید بره به سمت Bussiness . منطق برنامه حالا ممکنه این ابزار ها کمی باعث کندی هم بشن ولی امکاناتی که به ما می دن باعث می شه که ما از اونا استفاده کنیم

Amir Oveisi
یک شنبه 10 مهر 1390, 19:50 عصر
Entity Framework هم از LINQ Query پشتیبانی می کنه و بنابراین اگر شما به خاطر ساختار Query از LINQ استفاده می کردید، این مشکل رو با EF هم نخواهید داشت.

saed2006
یک شنبه 10 مهر 1390, 20:48 عصر
خب در بین ef های موجود کدوم از همه بهتر هست؟

Amir Oveisi
یک شنبه 10 مهر 1390, 21:37 عصر
Entity Framework ها نداریم، ORM ها داریم که Entity Framework یک ORM هست و به نظر من برای کار با دات نت بهترین گزینه است. برای استفاده از EF باید روی .NET 4 کار کنید.

saed2006
دوشنبه 11 مهر 1390, 12:15 عصر
سلام.
قبل از هر چیز، LINQ to SQL (و در نتیجه DBML ها) رو فراموش کنید (بدین دلیل (http://barnamenevis.org/showthread.php?306833-LINQ-%D8%A8%D9%87%D8%AA%D8%B1-%D8%A7%D8%B3%D8%AA-%DB%8C%D8%A7-ADO.NET&p=1347336#post1347336)) و از Entity Framework استفاده کنید. اما سوال اصلی، فرض کنید این In-Memory Data ها رو به هر شکل و شمایلی در برنامه نگهداری کردید، آیا در نهایت نباید این داده ها جایی Persist بشن؟ چون بالاخره با اتمام Process این برنامه، داده ها در صورتیکه فقط در Memory باشن از بین خواهند رفت... بنابراین اگر به هر دلیلی باید این داده ها رو Persist کنید، توصیه می کنم مدیریت اونها رو به یک DBMS بسپرید. اما اگر نیازی به Persist کردن اون داده ها ندارید، باز هم می تونید با استفاده از Entity Framework، مدلی برای داده های مورد نظرتون بسازید و توسط یک In-Memory Provider برای EF، داده ها رو در حافظه نگهداری کنید (بطور مثال SQLite از In-Memory Table ها پشتیبانی میکنه). البته شما ساز و کاری به اسم DataSet ها نیز دارید، که نگهداری داده ها رو بصورت Disconnected میسر کرده و نمی تونید اونو نیز نادیده بگیرید.

موفق باشید.
خب داده هاي من همه استاندارد نيست
مثلا يه peroperty دارم enum هست
يه peroperty دارم كه شيي از كلاسي هست كه توي سي شارپ ساختم

Amir Oveisi
سه شنبه 12 مهر 1390, 19:26 عصر
برای این کار شما میتونید از Complex Type ها در Entity Framework استفاده کنید. البته در حال حاضر enum ها در EF 4 ساپورت نمیشن، اما میتونید برای داشتن فیلدهای enum از این روش استفاده کنید:
http://blogs.msdn.com/b/alexj/archive/2009/06/05/tip-23-how-to-fake-enums-in-ef-4.aspx

موفق باشید

saed2006
چهارشنبه 13 مهر 1390, 11:16 صبح
در نهايت ميشه گفت اگر اطلاعات در ليست ها ذخيره بشن و ديتا بيسي در كار نباشه حافظه رم زياد مصرف ميشه
و اگر در ديتا بيس ذخيره بشه كد نويسي بيشتري به ساخت برنامه تحميل ميشه
كدوم را انتخاب كنم؟

Amir Oveisi
چهارشنبه 13 مهر 1390, 12:09 عصر
بینید شما اگر از EF استفاده کنید فرقی نمیکنه که دیتابیس داشته باشید یا نه، میزان کد نویسی تون تفاوت آنچنانی نخواهد داشت.