ورود

View Full Version : استفاده از یک کلاس به جای همه ی Entity های یکسان در همه ی لایه ها



resident
دوشنبه 21 بهمن 1392, 14:02 عصر
سلام. وقت بخیر
من یه نرم افزار تحت وب دارم که سه لایه است.
میخوام برای تمام Entity هایی که یکسان هستن (IDو Title دارن) یه کاری کنم.
میخوام به جای اینکه برای هر Entity در هر لایه، یه کلاس داشته باشم،در هر لایه بجای همشون(مثلا 30 تا Entity) فقط یک کلاس داشته باشم. اینطوری فقط مجبورم اسم Entity رو از UI تا لایه Data پاس بدم.
حالا میخوام بدونم آیا این کار روی Performance برنامه تاثیرمنفی میذاره؟

hakim22
دوشنبه 21 بهمن 1392, 20:58 عصر
اول اینکه دلیلی برای کم شدن از Performance نمیبینم

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

مهدی هادیان2
سه شنبه 22 بهمن 1392, 14:32 عصر
بسم الله الرحمن الرحیم
با سلام

میخوام برای تمام Entity هایی که یکسان هستن (IDو Title دارن) یه کاری کنم.
میخوام به جای اینکه برای هر Entity در هر لایه، یه کلاس داشته باشم،در هر لایه بجای همشون(مثلا 30 تا Entity) فقط یک کلاس داشته باشم.
فکر میکنم مباحث شی گرایی زیر سوال بره؛ ولی پراپرتی ها یکسان باشه یا همش یک کلاس بوده و یا میشه همه پراپرتی های مشترک رو در یک کلاس پدر ببرید و کلاس فرزند از اون ارث بری کنه.
شاید هم راهتون درست باشه ولی باز روی اون فکر کنید.
موفق باشید.

hakim22
سه شنبه 22 بهمن 1392, 19:32 عصر
در پروژه های وب مخصوصا در ASP.MVC خیلی سریع پروژه ها به سمت Service Oriented Programming میروند و بجای اینکه یک شی داشته باشیم و همه ی متدهاشو درون اون تعریف کنید. برای هر شی یک سرویس دهنده میسازیم و متدها رو درون اون قرار میدهیم. فضای مدل هرچه بیشتر به صورت اشیای ساده با خصوصیات های عمومی باشه بهتره. البته این تجربه ی شخصی منه

resident
چهارشنبه 23 بهمن 1392, 09:37 صبح
بسم الله الرحمن الرحیم
با سلام

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

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

resident
چهارشنبه 23 بهمن 1392, 09:39 صبح
در پروژه های وب مخصوصا در ASP.MVC خیلی سریع پروژه ها به سمت Service Oriented Programming میروند و بجای اینکه یک شی داشته باشیم و همه ی متدهاشو درون اون تعریف کنید. برای هر شی یک سرویس دهنده میسازیم و متدها رو درون اون قرار میدهیم. فضای مدل هرچه بیشتر به صورت اشیای ساده با خصوصیات های عمومی باشه بهتره. البته این تجربه ی شخصی منه

دوست عزیز یه دلیلی که باعث شد من برای این entity ها مدلهای مجزا تعریف کنم این بود که مثلا همشون پراپرتی Title رو داشتن ولی تو یه فرم طولش 50 بود و تو فرم دیگه طولش 100 بود. یا ترجمه ای که براش درنظر گرفته بودم در هر فرم تفاوت میکرد. ایا برای این راهی هست؟

مهدی هادیان2
چهارشنبه 23 بهمن 1392, 19:35 عصر
بسم الله الرحمن الرحیم

جناب هادیان پراپرتی های مشترک همه ی فرمها رو جدا کردم و همه ی کلاسها از اون ارث بری می کنن....
با سلام
منظورتون رو متوجه نشدم؛ به نظرم بهتره از اول صورت مسئله و راه حلتون رو واضح تر بیان کنید.
موفق باشید.

ali_autumnal
چهارشنبه 23 بهمن 1392, 23:02 عصر
اونطور که من متوجه شدم این سوال اصلا ربطی به MVC نداره و به بحث تحلیل و طراحی دیتابیس ربط داره!!

در ضمن سوال رو کامل تشریح نکرده اید!! حداقل چندتا از مدل هارو قرار میدادید تا خواننده بتونه یه پاسخ اجمالی بده

فیلد مورد نظر رو با طول متغیر در دیتابیس ذخیره کنید.

اگر فیلدی بصورت طول متغیر تعریف بشه مثلا اگر داده ای 100 بایت بود در این فیلد بطور اتوماتیک با طول 100بایت ذخیره خواهد شد و اگر 800بایت بود با طول 800بایت ذخیره خواهد شد و یا هر مقداری که داشت با همان مقدار ذخیره خواهد شد و هیچ ربطی به رکورد قبلی یا بعدی خود نخواهد داشت.

بنظرم این روش باعث میشه تعداد جدول های شما کاهش پیدا کنه.



public class MyClass
{
public int Id {set; get;}

public string Title {set; get;}

...
}

resident
پنج شنبه 24 بهمن 1392, 18:53 عصر
علی آقا

public class Affiliation : BaseEntity
{
[Display(Name = "نقش")]
[Required(ErrorMessage = "*")]
[StringLength(50, ErrorMessage = "حداکثر 50 کاراکتر وارد نمایید")]
public override string Title { get; set; }
}

public class Prefix : BaseEntity
{
[Display(Name = "پیشوند")]
[Required(ErrorMessage = "*")]
[StringLength(70, ErrorMessage = "حداکثر 70 کاراکتر وارد نمایید")]
public override string Title { get; set; }

}


علی آقا BaseEntity کلاسیه که فیلدهای مشترک توش قرار داده شده و همه ی کلاسها ازش ارث بری می کنن.
کلاسهایی مثل Affiliation یا Prefix فیلدهاشون عین کلاس BaseEntity است. اما همونطور که می بینید DisplayName و طول Title در هر کلاس با کلاس دیگه ممکنه متفاوت باشه و از اونجا که میخوام خود MVC کار اعتبارسنجی رو انجام بده ، مجبور شدم کلاسها رو مجددا ایجاد کنم.
اگر این مشکل نبود از همون کلاس BaseEntity برای همشون استفاده می کردم.
حالا میخوام ببینم راه حلی برای این مشکل وجود داره؟

ali_autumnal
جمعه 25 بهمن 1392, 16:56 عصر
خودتو درگیر این مسائل نکن!! من با حکیم موافقم:


در پروژه های وب مخصوصا در ASP.MVC خیلی سریع پروژه ها به سمت Service Oriented Programming میروند و بجای اینکه یک شی داشته باشیم و همه ی متدهاشو درون اون تعریف کنید. برای هر شی یک سرویس دهنده میسازیم و متدها رو درون اون قرار میدهیم. فضای مدل هرچه بیشتر به صورت اشیای ساده با خصوصیات های عمومی باشه بهتره. البته این تجربه ی شخصی منه

resident
جمعه 25 بهمن 1392, 17:09 عصر
خودتو درگیر این مسائل نکن!! من با حکیم موافقم:
okkkkkkkkkk
درگیر نمی کنم :چشمک:

مهدی هادیان2
شنبه 26 بهمن 1392, 11:59 صبح
بسم الله الرحمن الرحیم
با سلام

در پروژه های وب مخصوصا در ASP.MVC خیلی سریع پروژه ها به سمت Service Oriented Programming میروند و بجای اینکه یک شی داشته باشیم و همه ی متدهاشو درون اون تعریف کنید. برای هر شی یک سرویس دهنده میسازیم و متدها رو درون اون قرار میدهیم. فضای مدل هرچه بیشتر به صورت اشیای ساده با خصوصیات های عمومی باشه بهتره. البته این تجربه ی شخصی منه
لطفا راجع بهش بیشتر توضیح بدید.
با سپاس

ali_autumnal
شنبه 26 بهمن 1392, 16:07 عصر
بسم الله الرحمن الرحیم
با سلام

لطفا راجع بهش بیشتر توضیح بدید.
با سپاس

در ادامه این تایپیک (http://barnamenevis.org/showthread.php?441496-%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF-%DB%8C%DA%A9-%D9%BE%D8%B1%D9%88%DA%98%D9%87-MVC-%D8%A8%D8%A7-%D8%A8%D9%87-%DA%A9%D8%A7%D8%B1%DA%AF%DB%8C%D8%B1%DB%8C-%D8%A7%D9%84%DA%AF%D9%88%DB%8C-Unit-of-work-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-Structuremap-%DA%86%D9%86%D8%AF-%D9%84%D8%A7%DB%8C%D9%87)به این سوال شما پاسخ خواهیم داد.