PDA

View Full Version : سوال: نوشتن یه تابع که خودش تشخیص بده در کدام جدول باید ثبت اطلاعات کنه



YourWorldToday
دوشنبه 10 خرداد 1389, 23:28 عصر
با سلام
فرض کنید شما چند تا جدول دارید
مثلا: Car, Category, TypeServies
برای ثبت اطلاعات در بانک من از LINQ To SQL استفاده کردم
من از کد زیر برای ثبت اطلاعات در یک جدول استفاده می کنم.



publicEmDataContext Dc = newEmDataContext();
publicvoid Add(Car Obj)
{
Dc.Cars.InsertOnSubmit(Obj);
Save();
}
publicvoid Save() { Dc.SubmitChanges(); }


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

اَرژنگ
سه شنبه 11 خرداد 1389, 04:26 صبح
با سلام
فرض کنید شما چند تا جدول دارید
مثلا: Car, Category, TypeServies
برای ثبت اطلاعات در بانک من از LINQ To SQL استفاده کردم
من از کد زیر برای ثبت اطلاعات در یک جدول استفاده می کنم.



publicEmDataContext Dc = newEmDataContext();
publicvoid Add(Car Obj)
{
Dc.Cars.InsertOnSubmit(Obj);
Save();
}
publicvoid Save() { Dc.SubmitChanges(); }


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

به جایه جواب این سوال به : NHibernate, Entity و LinqToSql نگاه بندازید، در حقیقت در مبحثایه ORM جواب واقعیتان را پیدا میکنید، ولی به شکل خلاصه جواب این سوال به فوایدی که از مباحثی که اشاره شد نمیارزه.

YourWorldToday
سه شنبه 11 خرداد 1389, 07:21 صبح
پیشنهاد دیگری نیست؟

اَرژنگ
سه شنبه 11 خرداد 1389, 09:33 صبح
پیشنهاد دیگری نیست؟
اگر از روشهایه موجود در خود LinqToSql استفاده کنید احتیاجی به ساختن متدها به روشی که دنبالش هستید نمیماند.

mehdi.mousavi
سه شنبه 11 خرداد 1389, 10:00 صبح
با سلام فرض کنید شما چند تا جدول دارید مثلا: Car, Category, TypeServies برای ثبت اطلاعات در بانک من از LINQ To SQL استفاده کردم من از کد زیر برای ثبت اطلاعات در یک جدول استفاده می کنم. خوب حال این مورد برای یکی دوتا جدول مناسبه ولی اگر جد.ول ها زیاد بشه دیگه نوشتن تابع Add یه کار تکراری میشه. سوال من اینجاست که چطور میشه تابع Add رو طوری نوشته که با فرستادن یه ابجکت خود تابع ابجکت را در تیبل خودش ثبت کنه با تشکر

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

یک کلاس BusinessEntity (یا اسمش رو هر چی مایلید) بسازید که در واقع کلاس Car، Category و ... باید از اون Derive بشن.

سپس کلاس Generic ای به اسم Repository (یا هر چه که مایلید اسمش رو بذارید) ایجاد کنید و تعیین کنید که پارامتر ورودی، از نوع BusinesEntity هستش.

سپس در کلاس Base، (یعنی همین Repository)، متود هایی در نظر بگیرید برای پر کردن یک Entity، گرفتن پارامترهای CRUD ی یک Entity و ... و بر حسب نیاز در کلاس CarRepository، CategoryRepository و ... که همگی از Repository باید Derive بشن، میتونید متودها رو Override کنید و به هدفتون برسید. بدین ترتیب کلیه کارهای تکراری در Base Class انجام خواهد شد.

موفق باشید.

ricky22
سه شنبه 11 خرداد 1389, 12:26 عصر
سلام.
Generic ها اینجا کاربرد دارن... البته پاسخ جناب آرژنگ کاملا صحیح هستش، اما اگر اصرار دارید از ORM ها استفاده نکنید، میتونید بدین شکل عمل کنید.

یک کلاس BusinessEntity (یا اسمش رو هر چی مایلید) بسازید که در واقع کلاس Car، Category و ... باید از اون Derive بشن.

سپس کلاس Generic ای به اسم Repository (یا هر چه که مایلید اسمش رو بذارید) ایجاد کنید و تعیین کنید که پارامتر ورودی، از نوع BusinesEntity هستش.

سپس در کلاس Base، (یعنی همین Repository)، متود هایی در نظر بگیرید برای پر کردن یک Entity، گرفتن پارامترهای CRUD ی یک Entity و ... و بر حسب نیاز در کلاس CarRepository، CategoryRepository و ... که همگی از Repository باید Derive بشن، میتونید متودها رو Override کنید و به هدفتون برسید. بدین ترتیب کلیه کارهای تکراری در Base Class انجام خواهد شد.

موفق باشید.
پیشنهاد من استفاده از nettiers به همراه codesmith هست که همه این کارها رو انجام میده

YourWorldToday
سه شنبه 11 خرداد 1389, 16:03 عصر
با تشکر از دوستان که راهنمایی کردن
این سوال را در فروم C# سایت MSDN مطرح کردم - یکی از برنامه نویسان پاسخی که می خواستم را ارسال نمود
.
پاسخ سوال به این صورت هستش


public void Add(object Obj) {
Dc.GetTable(Obj.GetType()).InsertOnSubmit(Obj);
Save();
}


این هم لینک
http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/035bab06-f468-48a0-abca-736e9a8c09e7

اَرژنگ
چهارشنبه 12 خرداد 1389, 03:19 صبح
با تشکر از دوستان که راهنمایی کردن
این سوال را در فروم C#‎‎‎‎ سایت MSDN مطرح کردم - یکی از برنامه نویسان پاسخی که می خواستم را ارسال نمود
.
پاسخ سوال به این صورت هستش


public void Add(object Obj) {
Dc.GetTable(Obj.GetType()).InsertOnSubmit(Obj);
Save();
}


این هم لینک
http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/035bab06-f468-48a0-abca-736e9a8c09e7

اگر منظور از پاسخ، یک جواب در سطح پائین است که بر اساسی اصولی بنا نیست و فقط کار را راه میندازه ، در آن حالت بله جواب در لینک داده شده ولی این نوع روشهایه تابعی که بر اساسی بنا نیستند را نمیشه جزو روشهایه قابل قبول برنامه نویسی دانست.

اگر هدف یادگیری اصولی و روشهایه حرفه‌ای است ، جواب جناب موسوی باید پیگیری میشد، با مطالعه فصل ۶ کتاب
Microsoft .Net Architecting Applications for the Enterprise
اشکالات جوابی را که گرفتید و اینکه چرا پیگیری جواب جناب موسوی به بالا رفتن سطح برنامه‌نویسی کمک میکرد را درک میکنید.