PDA

View Full Version : سوال: چنین ساختاری در برنامه صحیح است؟



man_iran
چهارشنبه 13 بهمن 1389, 21:44 عصر
فرض کنید یک برنامه چند لایه داریم.
برای هر کدام از شی های موجود در برنامه یک کلاس ایجاد می کنیم. (مثلا برای سه شی دانشجو، درس، استاد)

حالا مشخصات هر کدام از این سه شی را در خود آنها بصورت پروپرتی معرفی می کنیم.

دانشجو
ش دانشجویی
نام
نام خانوادگی
سال تولد
شماره شناسنامه


درس
مشخصه درس
نام
تعداد واحد


استاد
ش استاد
نام
نام خانوادگی
سال تولد
شماره شناسنامه


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

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

آیا چنین ساختاری صحیح است؟
متد های جستجو و نمایش و لیست هر کلاس شی، را توی خودش قرار بدیدم؟

ACorvinus
پنج شنبه 14 بهمن 1389, 07:42 صبح
سلام.
همه کارایی که بهشون فکر کردی و میخوای اونارو عملی کنی خوبه بجز:


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


برای قسمتی که تو نقل قول گذاشتم یه کلاس مجزای دیگه تعریف کن که همه متدهاش static هستن (اعم از لیست، جستجو، نمایش و ... ). با این تعریف هر موجودیت شما 2 تا کلاس خواهد داشت. روش اول که میخوای بری به نظر من درست نیست. چون در اون موقع هر کلاست برای خودش یه Search، Present و List مجزا خواهد داشت در حالی که ما میخوایم در کل برای همه کلاس ها فقط و فقط یه متد Search و یه متد Present و در نهایت یه لیست مشترک که حاوی اطلاعات کل کلاسهات هست باشه.

-------------------------------

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

موفق باشی.

man_iran
پنج شنبه 14 بهمن 1389, 11:30 صبح
خب چطور می شه یه لیست برای تمام کلاس ها ایجاد کرد؟ نوع آن لیست را چی بزارم؟

man_iran
پنج شنبه 14 بهمن 1389, 12:48 عصر
راستی شما می گید که برای تمام کلاس ها یک متد ارسال، دریافت، حذف و... درست کنم! مگه می شه؟
هر کدام از کلاس ها با یک کلاس مشابه در لایه دیتااکسس ارتباط داره. مثلا متد ارسال کلاس دانشجو، شی از کلاس دانشجو می گیره و به لایه دیتااکسس می بره. لایه دیتااکسس هم با توجه به مقداری دریافت شده آنها را ارسال می کنه.
حالا اگ بخوایم برای همه یک متد داشته باشیم باید چکار کنیم؟

ACorvinus
پنج شنبه 14 بهمن 1389, 13:20 عصر
سلام.

یه نمونه برنامه برات میذارم. من برای موجودیت Book کلاس هاشو ساختم. نگاش کن برای بقیه هم همچین بساز.


65905

man_iran
پنج شنبه 14 بهمن 1389, 13:34 عصر
سلام
ممنون. ولی خب با این روش باز هم باید برای هر کلاس یک لیست داشته باشیم نه یک لیست برای تمام کلاس ها.
حالا اگر دو تا کلاس (خصوصیت و توابع) را با هم ادغام کنیم به مشکل بر می خوریم؟

ACorvinus
پنج شنبه 14 بهمن 1389, 13:39 عصر
ولی خب با این روش باز هم باید برای هر کلاس یک لیست داشته باشیم نه یک لیست برای تمام کلاس ها.


رفیق من هیچ وقت نگفتم یه لیست برای تمام کلاس ها. گفتم یه لیست برای تمامی نمونه موجودیت های یک کلاس.


حالا اگر دو تا کلاس (خصوصیت و توابع) را با هم ادغام کنیم به مشکل بر می خوریم؟

من معتقدم این کارو نکنی. اگه میخوای بازم نظر دوستان رو بپرس. موفق باشی.

man_iran
پنج شنبه 14 بهمن 1389, 13:55 عصر
آخه من اشکال خاصی در ادغامشون نمی بینم. تا حالا کسی اینکار را کرده و به مشکلی بر خورده؟ اگر اشکالی داشت خود دات نت این کار را نمی کرد مثلا وقتی دیتاتایم را فراخوانی می کنید می بینید تمام صفت ها و اعمال با هم هستند و این طوری نیست که صفت را از یه جا فراخوانی کنید و اعمال را از جای دیگه اگر اشتباه می کنم بگید.

ACorvinus
پنج شنبه 14 بهمن 1389, 16:34 عصر
تا اونجایی که من میدونم DateTime یه struct هست نه یه کلاس.

man_iran
پنج شنبه 14 بهمن 1389, 19:32 عصر
درست می گید. ولی من مثال زدم
من می گم تمام کلاس هایی که توی دات نت هستند به همین شکل عمل می کنند یعنی اعمال و صفات ها با هم هستند.
تا حالا شده بخواید از چیزی استفاده کنید و صفات را به جایی بفرستید بعدش برای انجام عملیات از کلاس دیگه ای استفاده کنید؟