PDA

View Full Version : ساختار MVC و متد های Model



Jason.Bourne
پنج شنبه 16 آذر 1391, 16:41 عصر
آیا در برنامه نویسی بصورت MVC همه متد هایی که برای Model تعریف می کنیم، حتما باید با داده ها کار کنند؟

منظور را با یک مثال بیان میکنم.

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

سوال من این هست که متد های دومی که با پایگاه داده ارتباط ندارند را باید بیرون از مدل نگهداری کنم و یا در همان Model قرار بگیرند.

MMSHFE
پنج شنبه 16 آذر 1391, 18:39 عصر
اگه کارهای مربوط به دیتابیس رو انجام میدن، حتی اگه مستقیماً با DB در ارتباط نیستن هم بهتره توی مدل باشه. بطور کلی خارج از مدل متدهایی که با DB درگیر میشن رو قرار ندین. اینطوری کدتون تفکیک پذیری خوبی خواهد داشت. اگه بخواین خیلی اصولی کار کنید هم میتونید توی بخش مدل یک کلاس Base بگذارین که به DB وصل میشه و کارهایی رو انجام میده که مستقیماً با DB در ارتباطه و بعد یک کلاس Derived ازش ایجاد (مشتق) کنید و امکانات جانبی رو توی اون بگذارین.

Jason.Bourne
جمعه 17 آذر 1391, 12:07 عصر
یک مقدار از اون چیزی که مد نظر من بود دور شدیم (البته به خاطر توضیحات بد من هست).

ببینید،
من یک مدل دارم به نام userModel و متدی در این کلاس هست به نام getUserInfo که این متد بر اساسuserId کاربر اطلاعات را از دیتابیس select میکنه. (تا اینجا مشکلی نیست)
من می خواهم یک متد داشته باشم به نام isAdmin که بر اساس یکی از فیلدهایی که getUserInfo بر میگرودونه، مشخص میکند که کاربر فوق admin هست یا خیر!

سوال اصلی اینجاست که بهتر است متد isAdmin در داخل Model قرار بگیره یا نه (با توجه به اینکه متد isAdmin مستقیما به دیتابیس وصل نمیشه و از خروجی یکی از متدهایی که به دیتابیس وصل میشه، استفاده می کند!)

mtchabok
جمعه 17 آذر 1391, 15:16 عصر
سلام
به نظر بنده شما میتونید متدها و مشخصاتی رو که در دیتابیس وجود دارند رو در مدل قرار بدید . در واقع مدل یک پل ارتباطی بین برنامه و دیتابیس هس که میتونه هر چیزی رو از دیتابیس بخونه ، پردازش کنه و به برنامه تحویل بده . بنابراین تا اونجایی که اطلاعات مربوطه در دیتابیس هس میتونید برای پردازشش از متدهای مدل استفاده کنید .

Jason.Bourne
جمعه 17 آذر 1391, 15:36 عصر
سلام
به نظر بنده شما میتونید متدها و مشخصاتی رو که در دیتابیس وجود دارند رو در مدل قرار بدید . در واقع مدل یک پل ارتباطی بین برنامه و دیتابیس هس که میتونه هر چیزی رو از دیتابیس بخونه ، پردازش کنه و به برنامه تحویل بده . بنابراین تا اونجایی که اطلاعات مربوطه در دیتابیس هس میتونید برای پردازشش از متدهای مدل استفاده کنید .

بنابراین متد هایی که یک جورایی Helper هستند و خودشون با دیتابیس ارتباط مستقیم ندارند هم می تونند در Model قرار بگیرند؟!

mtchabok
جمعه 17 آذر 1391, 16:10 عصر
بله میتونن . ولی باید مشخص بشه که شما میخواین برنامه تون چند لایه باشه . اگه سه لایه میخواید بهتره که در مدل قرار بگیره .
در ضمن باید مشخص بشه که شما از مدل به چه صورتی دارید استفاده میکنید . اگه مدل رو به عنوان یک نمونه از دیتابیس میبینید در اینصورت نباید یه چنین متدهایی رو بهش اضافه کنید ولی در غیر اینصورت مشکلی نیست .

rezaonline.net
جمعه 17 آذر 1391, 17:15 عصر
سوال اصلی اینجاست که بهتر است متد isAdmin در داخل Model قرار بگیره یا نه
اگه بخشی به نام کامپوننت داری باید یه کامپوننت auth تعریف کنی و acl رو انجام بدی .
اگه نه بذار توی مدل .

Jason.Bourne
جمعه 17 آذر 1391, 18:38 عصر
بله میتونن . ولی باید مشخص بشه که شما میخواین برنامه تون چند لایه باشه . اگه سه لایه میخواید بهتره که در مدل قرار بگیره .
در ضمن باید مشخص بشه که شما از مدل به چه صورتی دارید استفاده میکنید . اگه مدل رو به عنوان یک نمونه از دیتابیس میبینید در اینصورت نباید یه چنین متدهایی رو بهش اضافه کنید ولی در غیر اینصورت مشکلی نیست .

در مدل یک Object از دیتابیس هم دارم. در واقع یکی از Property های مدل، یک شی از کلاس DB هست.




اگه بخشی به نام کامپوننت داری باید یه کامپوننت auth تعریف کنی و acl رو انجام بدی .
اگه نه بذار توی مدل .

چیزی به نام کامپوننت ندارم.
کامپوننت چه نقشی در MVC داره؟

mtchabok
جمعه 17 آذر 1391, 18:44 عصر
اگه مدلتون اطلاعات یک کاربر رو به همراه داره میتونید متد رو در همین مدل قرار بدید .

farhadfery
جمعه 17 آذر 1391, 21:20 عصر
چیزی به نام کامپوننت ندارم.
کامپوننت چه نقشی در MVC داره؟

کامپوننت ها با کنترلرها دوستند! هلپرها با ویو. behavior ها با مدل. همه اینها هم با ما دوستند.

Jason.Bourne
جمعه 17 آذر 1391, 21:39 عصر
کامپوننت ها با کنترلرها دوستند! هلپرها با ویو. behavior ها با مدل. همه اینها هم با ما دوستند.

تشبیه جالبی بود. :لبخندساده:
می توانید در این خصوص منبعی را به من معرفی کنید؟ (برای مطالعه بیشتر)

farhadfery
جمعه 17 آذر 1391, 21:42 عصر
تشبیه جالبی بود. :لبخندساده:
می توانید در این خصوص منبعی را به من معرفی کنید؟ (برای مطالعه بیشتر)

تشبیه نیست که! چیزی که هست را من گفتم.
منبع هم کتاب از apress هست.

Jason.Bourne
جمعه 17 آذر 1391, 21:47 عصر
تشبیه نیست که! چیزی که هست را من گفتم.
منبع هم کتاب از apress هست.

منظورم این بود که "دوست" بودن، تشبیه جالبی بود.

کدام کتابش؟!

farhadfery
جمعه 17 آذر 1391, 21:49 عصر
منظورم این بود که "دوست" بودن، تشبیه جالبی بود.

کدام کتابش؟!
کلا یک کتاب به نام pro mvc داره.:چشمک:

sadegh1362
سه شنبه 19 آذر 1392, 16:03 عصر
دوست عزیز از مفهوم اصلی MVC خارج نشیم ، آیا غیر اینه که شما می خواید داده ای رو که از مدل دریافت می کنید . می خواید چک کنید که admin هست یا نه ؟
آیا این یک کنترل برای داده دریافت شده از مدل نیست؟
شما می خواید سایتتون در صورت admin بودن امکاناتی رو به به admin نشون بده که به بقیه نشون نده . پس این وظیفه کنترلر سایته نه مدل ، اصلا کنترلر کارش دریافت داده های مدل و کنترل اونها و فراخونی view مورد نظر و ارسال داده های مدل در صورت لزوم به view هاست .

MMSHFE
سه شنبه 19 آذر 1392, 16:07 عصر
دوست عزیز تاپیک مال یک سال قبل بوده ها ! فکر نمیکنید تا حالا جواب گرفته باشن؟