بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

طراحی نرم افزار اندروید بر پایه روش MVC

مدیریت گفتگو
طاهر 12 سال پیش
آخرین تغییر: 11 سال پیش

دیدم در تایپیک دیگر بحث در مورد MVCموجب تغییر ماهیت تایپیک شد

گفتم یه تایپیک جداگانه برای این مورد بزنم .

اساتید لطف کنند با یه مثال عملی نحوه پیاده سازی MVCدر یکی از نرم افزارهای اندرویدی که در آ»وزش ها هست رو توضیح بدن

نظرات

uncocoder 12 سال پیش
سرویس پرسش و پاسخ رو من بر پایه VC ساختم و نه MVC ، اولش حدود 3 روز داشتم سعی می کردم MVC بنویسم، اما دیدم کد خیلی داره تاب ور می داره. اون چیزی که وحید جان میگه خودش انجام میده رو من نمی تونم درک کنم، هیچ چیز در برنامه نویسی خودش انجام نمیشه مگر اینکه ویزارد باشه. شما بالاخره باید درخواستت رو از C به M ارسال کنی دیگه و بعدش M باید فیلتر کنه و بهت برگردونه دیگه. نه درخواستش و نه فیلترش و نه برگردوندنش رو درک نمی کنم چطور اتوماتیکه. دوستان لطف کنن یک مثال عملی با سورس کد در هر زبانی در جواب همین سئوال بنویسن.
uncocoder 12 سال پیش
مرسی که تاپیک باز کردی. راستی لزومی به Android بودنش نیست. هر چی بود اوکی هست. فقط کد پشت پرده نداشته باشه. مثال هم تا جایی که میشه ساده باشه.
طاهر 12 سال پیش
به این خاطر گفتم اندروید چون خانه اندروید هست و خیلی از دوستان ممکنه به زبانهای دیگه مسلط نباشن برای همین برای روشنتر شدن موضوع یکی از پروژه های آموزشی رو با استفاده از روش پیاده سازی MVC دوستان توضیح بدن و روش بحث بشه فکر کنم اینجوری خیلی قابل درک و لمس تر باشه
AllahYar 12 سال پیش
من اینطوری نوشتم استاد که مسریاب میومدم آدرس رو تحلیل میکرد و کلاس های سیستمی رو لود میکردم و بعد کنترلر لود میشد و نسبت به آدرس های تحلیل شده کنترلر متدهاشو فراخوانی میکرد و بعد مدل وارد عمل میشد کتابخانه های مرتبط به پایگاه داده برای جدول مورد نظر کنترلر ایجاد میشدند به اسم خود جداول و سپس خروجی بر میگشت به کنترلر و کنترلر پاس میداد به ویو و ویو هلپرها رو فراخوانی میکرد خروجی رو برمیگردوند به کنترلر و در آخر کاربر لینک
uncocoder 12 سال پیش
@Taher : در خصوص اندروید بودن، در واقع چیزی داریم به اسم شبه کد، همه درکش می کنن، زبان های خوانایی مثل PHP, C#،java و ... با مدل نوشتاری Python و ... فرق می کنن. میشه PHP رو فهمید اما Python رو به این سادگی نمیشه فهمید و خیلی نوشتارش متفاوت تر از کد نویسی مرسوم هست.
uncocoder 12 سال پیش
@ AllahYar : اینترنت پر هست از این دیاگرام ها. کاملاً عملی می خوایم بنویسیم. یک نمونه من می ذارم دوستان تکمیل/تصحیح کنن یا کلاً یکی دیگه بنویسن، راستی این شبه کد هست. نه PHP هست نه Java.
AllahYar 12 سال پیش
استاد متوجه نشدم منظورتون Syntax هست ؟
طاهر 12 سال پیش
اگه با مثال پیش بریم و همه روی همون مثال نظر بدن و در آخر به یه مثال جامع برسیم فکر کنم خیلی بهترهمنتظر مثال استاد هستیم 

پاسخ‌ها 4

uncocoder 12 سال پیش

این یه تیکه کدی که میشه باهاش بحث رو شروع کرد. دوستان اگر ایرادی هست در منطق MVC اول تصحیحش کنن بعد بحث کنیم در موردش. راستی این کد شبیه PHP است اما صرفاً منظور PHP نبوده. همانطور که مشخصه کد کاملاً واضح هست. مثلاً در PHP بجای . از -> استفاده میشه اما من برای خوانایی بیشتر از همون . استفاده کردم. همینطور $ یعنی متغیر. و مثلاً PHP تایپ نداره اما من برای model تایپ گذاشتم.

// controller.php
class Controller {

private Model model;


public Constructor(){
model = new Model();
}


public function showUserInfo($userId){
$record = model.getUserInfo($userId);
render('someFile.php', $record);
}
}


// model.php
class Model {

public function getUserInfo($userId){
return getDatabase().query("SELECT name, family, age FROM users WHERE userid=$userId");
}
}


// someFile.php ( it can called View in MVC )
<div>
<span>Name is: <?= $record['name'] ?></span><br/>
<span>Family is: <?= $record['family'] ?></span><br/>
<span>Age is: <?= $record['age'] ?></span><br/>
</div>

و مثلاً اگر فرض کنیم دستور از وب سایت بیاد، اونوقت با صدا زدن url زیر در Browser باید خروجی رو ببینیم که در آن 3 شماره کاربری است که قصد داریم اطلاعاتش را ببینیم:

http://someDomain.com/Controller/showUserInfo/3

نظرات

طاهر 12 سال پیش
خیلی عالی و واضح فکر نکنم نیازی به توضیح باشه
AllahYar 12 سال پیش
استاد ما دست از سر پی اچ پی برداشتیم انگاری پی اچ پی نمیخواد دست از سر ما بر داره D:
uncocoder 12 سال پیش
نوشتن همین مثال برای اندروید، کلی سورس می خواست ( مخصوصاً تو نمایش ) اما PHP و HTML خیلی ساده و قابل درکه.
طاهر 12 سال پیش
یعنی پیاده سازی MVC در اندروید برای پروژه های کوچیک یا بزرگ مقرون به صرفه نیست ؟؟؟
uncocoder 12 سال پیش
وقتی شما لایه ها را با XML می سازید وعملاً هیچ کدی داخل آن نیست پس یک V دارید آنهم به چه خوبی. می ماند MC که به عقیده من لزومی نیست که حتی در پروژه های بزرگ جدا باشد. از طرفی معمولاً یک نرم افزار اندروید لایه Model نیاز ندارد و اگر داشته باشد بیشتر موکول می شود به وب سرویس که دیتا را از سرور می گیرد، مگر اینکه دیتابیس Local باشد که در آن صورت طبق صحبت های گذشته، به عقیده من Model زیادی است اما بعضی دوستان نظر دیگری دارند و احتمالاً هم نظرشان درست است.
uncocoder 12 سال پیش
اتفاقاً بحث ساده ای هست. مقاله های تخصصی معمولاً دیاگرام میکشن و مثال عملی ندارن. چیزی که من نوشتم خیلی ساده در کد MVC رو نشون میده. ( ساده ترین شکل ممکن ). در ضمن MVC یک Design Pattern هست، پس لزومی نداره همیشه و همه جا استفاده بشه. Design Pattern نسبت به Pattern معماری پروژه راه کارهایی ارائه میده.
MiRHaDi 12 سال پیش
سلام من فکر میکنم این که مودل جدا باشه این خوبی را داره که ما الان تصمیم میگیریم دیتا را در فایل ذخیره کنیم فردا تصمیم میگیریم در دیتابیس پس فردا توی مثلا رجیستری یا مثلا الان اوراکل کار میکنیم ، فردا میخوایم روی sqlite کار کنیم خیلی خیلی راحت توی لایه مودل این کار را انجام میدیم ولی وقتی با کدمون یک جا باشه باید همه کد را چگ کنیم و عوض کنیم حتی میتونیم خیلی راحت آپشنال بگیم از چه منبعی بخونه و بنویسه بدون اینکه کد خاصی بنویسیم این را در ORM بیشتر دیدم و خوشم اومده ( در فریمورک جانگو با زبان پایتون ) خوشحال میشم دوستان نظرم را تکمیل کنند یا اگر اشکالی داره بفرمایند
Vahid 12 سال پیش

یکی از جاهایی که از نظر من روی مدل به خوبی کار کرده و در ورژن 3 که در حال توسعه هست و به زودی ارائه میده یک دگرگونی اساسی انجام داده و بهترین MVC رو پیاده کرده CakePHP هست ...

CakePHP فرمورکی هست که با استفاده از اون میتونید خیلی ویزار تر کد نویسی کنید و نیازی به کار های تکراری و حوصله سر بر نیست و خیلی چیز هایی که شما بهش نیاز پیدا میکنید رو پیش بینی کرده و در قالب های مختلف در دسترس تون قرار میده و خوبیش هم این هست که اوپن سوروس هست و شما کاملا میتونید از API هاش سر در بیارید چون خط به خط داکیومنت شده ...

برای اینکه یک درک از Model داشته باشید پیشنهاد میکنم اینجا رو حتما مطالعه کنید ...

من از روز اول تلاش کردم تا اندروئید که مینویسم رو نزدیک به MVC همین فریمورک طراحی کنم اما فعلا به دلیل عدم تسلط کافی و وقت کم نشده تا کار مفیدی روی این مورد انجام بدم ...

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

نظرات

محمد حسین زاده 12 سال پیش

دوستان اگه تمایل دارن یه نمونه برنامه رو شروع کنیم که همگی روش نظر بدن و به یه جمع بندی کلی روی لایه های برنامه تو اندروید برسیم

نظرات

Spirit 12 سال پیش
من که تا اینجا چیزی نفهمیدم یعنی نمیتونم درک کنم ، ممنون
برای توضیح جزیات همین مباحث میخوام پروژه ای رو شروع کنم که صاحبنظر های سایت توش دخیل بشن. اگه تمایل دارید زیر پست اعلام کنید
Vahid 12 سال پیش
چه نوع پروژه ای مثلا ؟!
موضوع تاپیک که مشخصه. بحث روی پیاده سازی MVC تو اندروید میشه. یه برنامه تعریف میشه که امکاناتی خاص رو داشته باشه. مثلا : کار با تصاویر - تعامل با وب سرویس و یه سری چیزایی که تو آموزشها باشه و رو روش کد نویسیش بحث کنیم
uncocoder 12 سال پیش
من به شدت مخالفم. چون MVC همانطور که گفتم یک Design Pattern هست و Design Pattern ها مثل آچار می مونن، مطمئناً با یک آچار 18 نمیشه یک پیچ آلن رو باز و بسته کرد. MVC هم اینجا نقش آچار 18 رو داره و اندروید نقش پیچ آلن. چرا؟ چون اندروید از لایه دیتا خاصی قرار نیست استفاده کنه که همه می افته گردن webservice. در بعضی جاها با سایر Design Pattern ها مثل Singleton , Builder, Factory و ... در تناقضه. لایه V وجود نداره و خودش به عنوان XML در اندروید استفاده میشه. به دلیل Dynamic بودن کنترل برنامه های اندروید ( بر خلاف وب ) لایه کنترل بسیار پیچیده میشه و در نهایت مزاحمت ایجاد می کنه.
تو پست قبلی هم یکی از مواردی که در مورد MVC گفتم این بود که تیم روی پروژه کار میکنه و بناست گزارش بدن و رفع باگ کنن و ... که همون آچار 18 رو میخواد. اما تو اندروید هم بودن پروژه هایی که لایه هاشون به صورت library های جداگانه نوشته شده، حتی نه در حد تفکیک لایه ها با package. یعنی میشه پروژه ای باشه که نیاز به آچار 18 داشته باشه. ولی حداقل تاثیر این قضیه تو پروژه های 1 نفره اصلاح نحوه کدنویسی برنامه نویسه. تو پست قبلی بحث خیلی نا مربوط، ولی از اسپاگتی کد شروع شد. و قطعا عادت به استفاده صحیح از Design Pattern ها اولین راه رهایی از Dirty Code هستش
iSheykhi 12 سال پیش
اگر درست متوجه شده باشم: فایل xml لایه View هست، کدهایی که در کلس اکتیویتی نوشته می شه هم لایه Control رو تشکیل می دن، حالا یک کلاس هم برای گرفتن اطلاعات از دیتابیس می سازیم و در مکان مورد نظر فراخوانیش می کنیم. درست متوجه شدم؟ یا پیچیده تر از این حرفهاست؟
از یه نظر فایل xml ویو هست که طرفدارای زیادی هم داره. ولی دقیقترش نه. view میشه ترکیب xml و اکتیویتی. بدون وابسته کردن اکتیویتی به xml امکان استفاده از xml وجود نداره. پس لایه منطق برنامه - کنترلر جدای اکتیویتی هستش
iSheykhi 12 سال پیش
خوب می شد اگر یک نمونه پروژه اندرود عملی و سبک می ذاشتین
uncocoder 12 سال پیش
پروژه که نمیشه گذاشت کلاً . در خصوص اندروید هم به نظر من ابزار مناسبی نیست و بیشتر برای Server پیشنهاد می دم استفاده کنید.
Ali 11 سال پیش
خیلی عالی بود که این یه نمونه‌ای که آقای حسین زاده مد نطرشون بود انجام میشد تا با ساختار mvc در اندروید هم آشنا میشدیم. هیچ وقت دیر نیست... :)
sadeghbarout 12 سال پیش

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

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

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

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

حتی میتونه به شکل شبه کد باشه که از بحث یه زبان خاص خارج بشه

استاد ممنون میشم نظرشما و دوستان دیگه در این باره رو بدونم.

نظرات

uncocoder 12 سال پیش
در واقع MVC استانداردی نیست که جلوی قاطی شدن کد های برنامه نویس ها رو بگیره. بلکه Design Pattern ـی هست که باعث میشه برنامه سه لایه داشته باشه و لایه ها با هم تداخل نکنند که شامل همون Model Controller View هست. اما برای قاطی نشدن کدهای برنامه نویس ها مثلاً اگر همه دارن یک Module رو توسعه می دن، راه کارهایی وجود داره که معمولاً در جایی ثبت نشده و بنا به تجربه باید انجامش بدید. همه این راه کارها به شناخت خوب و مفید انواع Design Pattern، قوائد Object Oriented و طراحی API نیاز داره که به امید خدا در آموزشهای بعدی مورد هدف ما قرار خواهد گرفت.

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .