(۱۳۹۶ بهمن ۰۸, ۰۹:۳۴ ق.ظ)ImanAzadi نوشته: نقل قول:1- گرفتن قیمت یا مشخصات یک محصول از پایگاه داده بر عهده model هست. حالا اگر ما بخواهیم میزان تخفیف این محصول رو حساب کنیم این رو باید در controller حساب کنیم و یا در model .
این بخش رو میتونید هم تو مدل در نظر بگیرید هم در کنترلر . ولی بهتر اینه قیمت و مشخصات رو از مدل دریافت و در کنترلر تخفیفات صورت بگیره
نقل قول:2- در model فقط باید توابعی که با پایگاه داده سروکار دارن تعریف بشن یا میشه توابع دیگه رو هم حتی اگر به پایگاه داده نیاز نباشه (حداقل به صورت غیر مستقیم) تعریف کرد.
خیر. فقط باید توابع مربوط به دیتابیس در مدل تعریف شوند
نقل قول:3- چنانچه یه تابع داشته باشیم که در 2 صفحه یا بیشتر بهش نیاز داشته باشیم، این رو باید کجا تعریف کنیم (با توجه به اصل تکرار نکردن کدها) . مثلا در دو صفحه با controller های متفاوت چگونه میشه از یه تابع استفاده کرد.
یک کنترلر بنام my_controller تعریف میکنید که از کلاس کنترلر extend میشه و تمامی متدهای مشترک کنترلر ها رو در اون مینویسید
با سلام به همه دوستان و سپاس صمیمانه از دوستانی که پاسخ دادند.
این 2 مثال رو اگر ممکنه بررسی و پاسخ بدید ؛ این ها برام پرسش شده چون تعبیر های متفاوتی ازشون دیدم و خوندم.:
الف )
می خواهیم به یه کاربر در بخش محیط کاربریش خلاصه وضعیت زیر رو نشون بدیم در آدرس user/dashboard.
خلاصه وضعیت های :
- فهرست محصولات مورد علاقه
- نظرات این کاربر
- صورت حساب های این کاربر
تا اینجا ما نیاز داریم که اطلاعات رو از 3 جدول products , comments, bill بخونیم و بهش نمایش بدیم.
طبیعی هست که ما در هر کدام از model های این 3 جدول متد های مورد نیازمون رو از پیش داریم.
بهترین و استانداردترین راهکار که بتونیم کارایی ، توسعه پذیری ، تکراری نبودن و ... رو تضمین کنیم چیه؟
1- اون متد های مشترک رو همگی در model پایه و پدر بنویسیم(که این جوری فکر کنم خیلی این فایل شلوغ بشه)
2- یه کلاس واسط در نظر بگیریم که از model پدر ارث ببره و اون 3 مدل از این کلاس میانی(که در این صورت نمی دونم این کلاس میانی رو باید کجا و در کدام پوشه قرار بدم)
3- طبق صحبت جناب احسان(undifined) ما وصل میشیم به مدل user و از اون متد های مدل های دیگه هم استفاده می کنیم (این رو هم نمیدونم چه جوری، که ممنون میشم یه نمونه کد بنویسید یا توضیح بدید)
ب) و بحث دیگم اینه که :
ما اعتبار سنجی داده کاربر رو که هنوز صحبت وصل شدن به پایگاه داده نیست دقیقا کجا انجام میدم؟ مثلا :
کاربری می خواد ثبت نام کنه و با درخواست user/register اطلاعاتش رو می فرسته . در تابع register که یه action هست در کنترلر user ما باید :
1- اعتبار سنجی کنیم بدون نیاز به پایگاه داده.
2- بررسی کنیم که این مثلا email از قبل در پایگاه داده ما وجود نداشته باشه.
3- ثبت اطلاعات.
لطفا بگید استانداردش چیه ؟
- این که من همه این ها رو در یک تایع انجام بدم در همون مدل user
- یا اینکه مثلا 3 تا تابع بنویسم در مدل user که این 3 کار رو انجام بده
- و یک برنامه نویس دیگه هم می گفت: اونی که به پایگاه داده مربوط نیست (در اینجا اعتبار سنجی داده از لحاظ ساختار) رو به عنوان یک method در کنترلر تعریف کنیم اما به صورت private یا protected .
- یا روش دیگری
ممنون میشم که توضیح بدید به ویژه اگر که با نمونه کد باشه
با سپاس از وقتی که میگذارید .