آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

تلاشی برای پیدا کردن یک پترن توسعه در اندروید

Rabbit  7 سال پیش  7 سال پیش
+12 0

پی‌نوشت: اگر با MVC و دیزاین پترن آشنا نیستید لطفا به پاسخ اول مراجعه کنید تا اطلاعات کافی رو به دست بیارید، سپس به این پاسخ برگردید و در بحث شرکت کنید.

سوال اساسی اینه که ما چطور میتونیم از مدل MVC توی برنامه‌نویسی اندروید استفاده کنیم؟

وقتی ما داریم مثلا پایتون کار میکنیم این کار خیلی ساده‌ست چون الگوی خاصی برای قرار دادن کدهای مختلف نداریم و میتونیم mvc رو پیاده کنیم. اما توی اندروید viewها بصورت xml در layout هستن. از طرفی ما activity رو داریم که از یک سو کارِ view رو انجام میده از سوی دیگه بخش اعظمی از کار controller داخل اون انجام میشه.

دلیل اینکه کار view رو انجام میده اینه که منطق نمایش توی life cycleهای اکتیویتی اتفاق میفته و از طرف دیگه بسیاری از رفتارهای کنترلی نیاز به context اکتیویتی دارن بنابراین منطقیه تصور کنیم توسعه دهنده‌های اندروید هم معتقد بودن این دسته از فعالیت‌ها باید توی activity انجام بشه (اگر فکر میکنید اشتباه میکنم تصحیح کنید)

پس انگار عملا اندروید طوری توسعه داده نشده که بشه view و controller رو جدا کرد.

برای مدل خیلی پیچیدگی نداره. چون مدل همونه که توی جاواست و میشه به همون طریق عمل کرد. برای مدل من به این راهکار رسیدم که پکیج جداگانه‌ای رو در نظر بگیرم و ساختارها و POJOها رو اونجا قرار بدم. از طرفی کلاس‌هایی که شامل ساختار لیست‌ها میشه رو هم من مدل در نظر میگیرم (نظر شما هم همینه؟). 

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

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

من خیلی جستجو کردم و الگویی که توی فروم‌های خارجی خیلی ازش صحبت میشه همین mvc هست و آگهی‌های کار هم بعضا دانش mvc رو جزء شرایط (یا ترجیحات) خودشون قرار دادن.

اما مشکل من اینه که نمیتونم به یک الگوی مشخص برای توسعه mvc برسم. نمونه‌های سورس کد هم که هست یا تفاوت‌های بنیادی داره با همدیگه مثلا این کد رو با این کد مقایسه کنید:

اولی به طور کل activity رو ui حساب نکرده و با مدل خاصی که کد زده ui رو کاملا تبدیل به controller کرده. که البته این کار خیلی زیرکانه و حرفه‌ایه ولی از طرفی ممکنه بین سایر برنامه‌نویس‌ها مشترک نباشه و بیشتر کارو پیچیده کنه. 

لینک دوم از طرف دیگه یک پکیج به اسم viewController ساخته و activity ها رو اونجا قرار داده. یعنی باز نیومده view و controller رو جدا کنه. یه کارایی هم کرده که چون کامنت نذاشته خیلی مشخص نیست. از یکسری interface استفاده کرده که بخشی از پیچیدگی controller رو تقسیم کنه بین کلاس‌ها اما دقیقا مشخص نیست چرا و چطور.

و یا اینکه الگوشون خیلی مشخص نیست. شاید فهمیدن خودِ کد ساده باشه ولی اینکه از چه الگویی پیروی میکنه چندان مشخص نیست.

قبلا راجع به mvc بحث‌هایی شده داخل انجمن که اینجا میتونید پیگیری کنید. اما اون بحث هم به نتیجه عملی نرسید. استاد در یکجایی از اون بحث گفتن:

من به شدت مخالفم. چون MVC همانطور که گفتم یک Design Pattern هست و Design Pattern ها مثل آچار می مونن، مطمئناً با یک آچار 18 نمیشه یک پیچ آلن رو باز و بسته کرد. MVC هم اینجا نقش آچار 18 رو داره و اندروید نقش پیچ آلن. چرا؟ چون اندروید از لایه دیتا خاصی قرار نیست استفاده کنه که همه می افته گردن webservice. در بعضی جاها با سایر Design Pattern ها مثل Singleton , Builder, Factory و ... در تناقضه. لایه V وجود نداره و خودش به عنوان XML در اندروید استفاده میشه. به دلیل Dynamic بودن کنترل برنامه های اندروید ( بر خلاف وب ) لایه کنترل بسیار پیچیده میشه و در نهایت مزاحمت ایجاد می کنه.

من با این بخش که MVC شاید بهترین گزینه برای اندروید نباشه موافقم ولی درحال حاضر من جایگزینی براش پیدا نمیکنم و نهایتا باید یک دیزاین پترنی پیدا کنیم که بشه بصورت واحد توی اندروید ازش استفاده کنیم و اصطلاحا dirty code نداشته باشیم.

این تاپیک رو ایجاد کردم که دو تا کار کنیم:

یکی اینکه ایده‌هامون رو برای چطور پیاده‌کردن MVC توی اندروید بگیم. اگر شما از MVC (یا چیزی شبیه به اون که خودتون بهش رسیدید) استفاده میکنید راجع بهش صحبت کنید تا بصورت سیستماتیک‌ بررسی کنیم و شاید بشه به عنوان روشی استاندارد همه ازش استفاده کنیم.

دوم اینکه دوستان با سابقه بگن از چه روش‌ها و پترن‌هایی استفاده میکنن؟ شرکت‌هایی که در اونها گروهی روی پروژه کار میکنن بر اساس چه الگویی نرم‌افزار اندروید توسعه میدن؟

+1 0
سلام. یکی از دلایلی که به راحتی نمیشه رو برنامه نویسی اندروید دیزاین پترن ها رو اعمال کرد به عقیده من این هست که به طور پیش فرض لایه های برنامه نویسی برای شما جدا شده هست و شما کد های مربوط رو در قسمت های مشخص شده وارد میکنید و اگه از این الگو های رایج برای برنامه نویسی اندروید استفاده نکنید خیلی دچار مشکل نمی شید و اگه یکم با قاعده تر کد بزنیم و کامنت گذاری و یه سری شرایط دیگه رو رعایت کنیم نیازی به design pattern های مجزا نیست .. این سیاست گوگل برای برنامه نویسی اندروید بود که پیش بینی میکرد افراد با سطح دانش های مختلف وارد این حوزه میشن و به نحوی جلوی کد نویسی کثیف رو گرفته به نظرم.. ولی استفاده از این دیزاین پترن ها و الگو ها به performance کار خیلی کمک میکنه و کدنویسی رو بعد از یه مدت زیبا تر و جذاب تر و صددرصد قدرتمند میکنه برای برنامه نویس. خودم خیلی در اندروید به دیزاین پترن ها معتقد نبودم و فعلا هم به همون شکل عادی کد میزنم اما با رعایت اصول و کامنت گذاری و استفاده از گیت و ... خلاصه به نظر من برای برنامه نویسی اندروید خیلی لازم نمی بینم این قضیه رو .. البته شاید من تو اندروید ازش استفاده نکردم و تجربه خاصی نداشتم این حس رو دارم . مرسی بابت ایجاد این تاپیک و خوشحال میشم از تجربه مابقی دوستان استفاده کنم. (7 سال پیش)
+1 0
خیلی ممنون از اینکه مشارکت می‌کنید. اگر ایرادی نداره میشه ازتون بپرسیم شما توی یک شرکت و گروهی هم کار می‌کنید یا خودتون روی پروژه‌ها کار می‌کنید؟ منم این حس رو دارم که گوگل سعی داشته طوری اندروید رو توسعه بده که هرکسی با هر دانشی بتونه اپلیکیشن بنویسه. دلیلش هم احتمالا رقابت با ios و تعداد بالای اپلیکیشن‌های app store در اون زمان بوده. ولی به مرور توی جامعه برنامه‌نویسی احساس نیاز به یک دیزاین پترن احساس شده. توی استک سوالات زیادی در این خصوص هست. بلاگرها پست‌هایی رو منتشر کرده‌ان و همه دنبال جواب همین سوال هستن. برای من وقتی بیشتر این مساله اهمیت پیدا میکنه که می‌بینم خود گوگل به وضوح از یک پترن استفاده می‌کنه(البته اگر نکنه عجیبه) برای مثال روی هر المان سیستمی کلیک کنید و به سورسش نگاه کنید رد پایی از یک الگوی خاص در طراحی دیده میشه. به طور خاص منظورم استفاده از interfaceهاست. مثلا من با دانش کمی که دارم پترن observable و iterator رو میتونم تشخیص بدم ولی اینکه کل پروژه بر چه اساسی نوشته شده رو نمیفهمم. البته نیازی هم به فهمیدنش نیست. ولی به نظرم ما هم باید یک پترن مشخص داشته باشیم چون گوگل فقط برای ما مشخص کرده Activity و فرگمنت و اپلیکیشن و... چیه. اما این که از هر کودوم به چه شکلی استفاده بشه دست ماست و به نظرم باید یک قاعده و قانونی براش در بیاریم که خیلی بهتر بشه استفاده کرد. ضمن اینکه شما خودتونم به درستی به فواید دیگه این کار اشاره کردید. (7 سال پیش)
+1 0
من بیشتر بصورت فریلنسری کار میکنم و فعلا اندروید و وب (پی اچ پی-بک اِند) کد میزنم. برای وب بیشتر با mvc کار میکنم و گاها با فریمورک هایی مثل codigniter و laravel کار میکنم و خیلی هم از فریمورکی که استاد در آموزش وب ایجاد کردن کار میکنم و راضی هستم ولی برای اندروید پیش نیومده بخوام از design pattern خاصی استفاده کنم. شاید اگه اجباری تو کار باشه برای پروژه ای که از این الگوها در اندروید استفاده کنم قطعا میرم سراغش. (7 سال پیش)
+3 0
در حال حاضر معماری MVP بیشتر از باقی معماری ها مطرح هست، یعنی بیشتر محتواهای تولید شده ای که من دیدم پیرامون این معماری بوده، خود گوگل هم یه مخزن با مثال های مختلف بر اساس چند تا معماری داره لینک خودم فعلا با Dagger2 و RxJava سروکله میزنم تا بعد با ‍‍MVP شروع کنم. (7 سال پیش)
+3 0
یه نیم نگاهی هم به این لینک داشته باشید، mvc برای اندروید مناسب نیست - اندروید وضعیت برنامه رو نگه میداره و به ترتیب الگوی mvvm یا mvp براش مناسب تره. لینک بالا هم میتونه برای پیاده سازی mvp استفاده بشه هم در صورتیکه با observable ها مخلوط بشه mvvm - این لینک هم توضیحات خوبی داره که به انتخاب کمک میکنه (7 سال پیش)
0 0
مرسی آقای نصرتی - spirit اگه اشتباه نکنم :) - باب لینک. آره دقیقا منم دارم سر و کله میزنم که چطوری میشه بصورت عملی توی پروژه‌ها استفاده کرد. مفهومشون ساده‌ست ولی وقتی استفاده میکنم میبینم که همون مدل قدیم کد زدم فقط چندتا رویداد رو با Rx پیاده کردم. یعنی نمیتونم کامل یک پروژه اینجوری توسعه بدم. من واضح‌ترین آموزش که دیدم این (https://www.raywenderlich.com/141980/rxandroid-tutorial) بود. یک مجموعه مقاله توی مدیوم هست (https://medium.com/crunching-rxandroid/crunching-rxandroid-part-1-4ac7b7123238?source=placement_card_footer_grid---------0-41) به نظرم خیلی خوب نگفته ولی شاید تو بهتر متوجه بشی. برای شروع هم این لینک به من کمک کرد که بتونم درک کنم کلا قرار هست چی کار کنیم. (7 سال پیش)
0 0
ممنون آقای حسین زاده. دقیقا منم این چند روز به mvvm رسیدم. من هم مثل آقای نصرتی بیشتر سعی دارم راهی برای استفاده کاربردی RxJava پیدا کنم. توی کاربردهای موردی میتونم استفاده کنم ولی وقتی میخوام یک پروژه کامل براساس Rx بنویسم یک مقداری به مشکل بر میخورم چون ذهنم عادت کرده پله‌ای فکر کنه و سختمه براساس رویداد یک پروژه رو ببینم. این مقاله (https://github.com/florina-muntenescu/DroidconMVVM/blob/master/app/src/main/java/upday/droidconmvvm/datamodel/DataModel.java) باعث شد که با mvvm آشنا بشم. حتما به نتایج ملموسی برسم اینجا هم به اشتراک میذارم. خوشحال میشم شما هم تجربیاتتون رو در اختیارم قرار بدید. (7 سال پیش)
0 0
لینک‌های خراب به ترتیب: لینک - لینک - لینک (7 سال پیش)
+1 0
خیلی ممنون دوست عزیز ولی تا جایی که من میدونم برای اندروید از الگوی mvvm استفاده میشه و استفاده باید کرد (7 سال پیش)
0 0
امروز به طور اتفاقی با وبلاگ آقای علی بهزادیان نژاد آشنا شدم و دیدم یک مجموعه مقاله درباره الگوی mvp از تین مگالی از لینک ترجمه کردن. و به حق ایشون خیلی روون ترجمه میکنه بنابراین شاید برای بد نباشه نگاهی به لینک بندازید (7 سال پیش)
 برای این سوال 4 پاسخ وجود دارد. مشاهده پاسخ صحیح
پاسخ به سوال 
Rabbit  7 سال پیش
+5 0

نمیدونم چقدر با دیزاین پترن(الگوی طراحی) و واژه MVC آشنا هستید. اگر خیلی آشنایی ندارید توصیه میکنم این مجموعه پست‌ها رو مطالعه کنید.

اگر حوصله یا زمان کافی ندارید من توضیحات مختصری رو همین‌جا میدم که شاید خیلی دقیق نباشه اما میتونه کمک کنه با بحث آشنا بشید.

دیزاین پترن یا الگوی طراحی به مجموعه قواعد و قوانینی میگن که کمک میکنه ما با یکسری دغدغه‌های شناخته شده برنامه‌نویسی سیستماتیک برخورد کنیم.

مثلا ممکنه توی یک پروژه ما تعداد زیادی instance داشته باشیم که اشتراکات زیادی دارن. تعداد بالای این نمونه‌ها میتونه به حافظه فشار بیاره و حتی باعث memory leak بشه. از طرفی هم پردازش همزمانشون به پردازنده فشار میاره و مصرف باتری رو هم زیاد میکنه. برای حل این مشکل هرکسی یک ایده‌ای ممکنه داشته باشه اما یک راه حل پذیرفته شده و بهینه استفاده از Flyweight Pattern هست. Flyweight الگوییه که اگر ما طبق اون توسعه بدیم میتونیم توی حافظه و پردازش صرفه‌جویی قابل توجهی انجام بدیم.

پترن‌ها انواع مختلفی دارن. بعضیا برای ذخیره سازی داده استفاده میشن بعضیا برای روند‌های همزمان و...

حالا فرض کنید داریم یک پروژه بزرگ رو توسعه میدیم و در طول کار دائم باید در کلاس‌های مختلف تغییراتی رو ایجاد کنیم. همکارانی هم داریم که همزمان در حال توسعه هستن. هماهنگی این بین ممکنه خیلی دشوار بشه. 

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

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

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

حالا بین این پترن‌ها مدل MVC یک مدل شناخته شده و رایج هست که توی انواع پلتفرم‌ها استفاده میشه. 

MVC مخفف سه کلمه model - view - controller هست که خیلی خلاصه توضیح میدم.  

model: ساختارهای پروژه رو در برداره. هر کلاس همراه با تمام متغیرها و constructor و... بخشی از مدل هستن.

view: میشه گفت شامل UI پروژه‌ست. البته توی مدل MVC کار view بیشتر از فقط UI بودنه و از logic هم برخورداره ولی به دلیلی که اینجا ذکر کردم ما view رو فقط UI در نظر میگیرم. وقتی این کارو کنیم مدل تبدیل به MVP میشه. اما چون presenter نامانوس‌تر از controller هست من از همون MVCC استفاده میکنم.

controller: ارتباط دهنده view و model هست. و logic برنامه رو شامل میشه. به عبارتی جریان اطلاعات داخل مدل رو کنترل می‌کنه و همچنین با تغییر مدل، ویو رو آپدیت می‌کنه.

پاسخ به سوال 
Rabbit  7 سال پیش
+4 0

دوستان به نظرم بهترین راه برای رسیدن به یک روش واحد توسعه گروهی هست برای همین من یک پروژه بر اساس آموخته‌هام درست کردم و توی github قرار دادم. این پروژه بر اساس مدل MVP طراحی شده.

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

توی این چند روزی که این تاپیک ایجاد شد متوجه شدم با صحبت کردن و تبادل نظر نمیشه به یک نتیجه واحد رسید، شاید اگر با هم کد بزنیم بهتر بتونیم نتیجه بگیریم.

برای مشارکت توی تکمیل این پروژه به لینک پروژه برید و اون رو fork کنید. اگر نمیدونید git چیست یا چطور میتونید در پروژه مشارکت کنید از اینجا شروع کنید. آموزش‌های git آقای آقاجانی رو ببینید تا ایده اولیه دستتون بیاد. البته با خودِ اندروید استودیو و بدون کراکن هم میتونید تو پروژه مشارکت کنید. کافیه این آموزش‌ها رو ببینید تا همهه چیز دستتون بیاد.

به خود کد بپردازیم.

تا الان چی کار کردم؟

بخش اول: ظاهر کد

اپلیکیشن 5 تا پکیج اصلی داره که تک تک توضیحشون میدم:

1. api: کلاس‌های مربوط به api رتروفیت رو اینجا قرار دادم. بعد از مطالعه مقالات زیاد توی این چند روز به نظرم بهتر اومد کلاس‌های apiها رو جدا از presenter نگهداریم.

2. model: همون مدلی هست که توی MVC و MVP و MVVM داریم. تنها ویژگی‌ای که داره اینه که توش برای ساختمان داده‌هایی که مربوط به api هستن یک فولدر جدا در نظر گرفتم که به مرتب شدن کد کمک میکنه. همچنین توی فولدر api هم responseهای رتروفیت رو از بقیه زیر ساختارها جدا کردم. دلیل این کار تجربه شخصی بود که توی پروژه‌های بزرگ که ارتباطات زیادی با سرور داره و مدل‌های رتروفیتی زیادی استفاده میکنیم پیدا کردن responseها شاید یکمی سخت بشه. برای همین جدا میکنم.

3. presenter: پرزنتر در مدل mvp رو اینجا قرار دادم. اطلاعات بیشتر راجع به اینکه presenter چیه -> اینجا.

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

4. utils: تمام کلاس‌های مفید مثل چک کننده اینترنت، هندل کننده پرمیشن و... اینجا قرار میگیره

5. view: اکتیویتی‌ها و فرگمنت‌ها و adapterها و هر چیزی که کار view رو انجام بده اینجا قرار میگیره. من برای اکتیویتی، فرگمنت، ادپتر و کاستوم ویو ها پکیج جدا در نظر میگیرم. باز هم به دلیل خوانایی بیشتر در پروژه‌های بزرگ

بخش api و utils و model فکر نمیکنم احتیاجی به توضیح داشته باشه. با یک نگاه ساده به کد متوجه خواهید شد. برای همین view رو توضیح میدم.

بخش دوم: View

هر view دو بخش داره. بخش اول یک interface هست که مشخص میکنه view چه متدهایی رو اجرا خواهد کرد. و بخش دوم پیاده‌سازی همین متدهاست.

این پروژه فقط یک اکتیویتی داره (MainActivity) که MainView رو پیاده میکنه. MainView اینترفیس مربوط به MainActivityـه.

این سوال حتما پیش میاد که چرا برای پیاده کردن متدهای داخل اکتیویتی از interface استفاده میکنیم؟ دلیلش اینه که بعدا توی presenter میخوایم این متدها رو صدا کنیم و نمیخوایم برای این فراخوانی‌ها به سراغ اکتیویتی بریم. چون کلا فلسفه تمام این کارها اینه که منطق کاریمون رو از view جدا کنیم و اکتیویتی فقط و فقط وظیفه نمایش رو داشته باشه.

یکسری وظایف ناخودآگاه به عهده activity هست. مثلا گرفتن permissionهایی که در ابتدای برنامه نیاز داریم. منطق این کارها هم به presenter منتقل شد و فقط توی MainView متدهایی برای پاس دادن context و activity پیش‌بینی شده که presenter بتونه این کارو انجام بده. 

بخش سوم: Presenter

presenter هم مثل view از دو بخش interface و implementation تشکیل میشه.

ارتباط بین view و presenter با یک instance از اینترفیس MainView (یا هر اینترفیسی از ویوی که لازمه) انجام میشه. 

بخش چهارم: RxAndroid

من برای ارتباط با سرور از RxJava و برنامه‌نویسی reactive استفاده کردم. RxAndroid و RxJava از پترن Observer استفاده میکنن و به ما کمک میکنن که راحت‌تر بتونیم taskkهای مختلف رو از هم جدا کنیم.

من دوست داشتم کل پروژه رو براساس Rx بنویسم ولی متاسفانه هنوز دانشش رو ندارم. این یکی از مهمترین بخش‌هاییه که میتونید کمک کنید تا پروژه تکمیل‌تر بشه.

چطور مشارکت کنید؟

اگر قصد تمرین دارید (کسایی که میخوان یاد بگیرن)

  1. برای کلاس‌ها و متدهای پروژه کامنت مناسب اضافه کنید.
  2. یک loading برای زمانی که روی get jokes کلیک میشه تا زمانی که جوک‌ها آماده بشه طراحی کنید.
  3. در ابتدای برنامه دسترسی به اینترنت رو چک کنید و پیام مناسب نمایش دهید.

اگر قصد مشارکت دارید (کسایی که میخوان به توسعه کمک کنن)

  1. قطعا پروژه ایراداتی داره. رفع یا گزارش اون‌ها بزرگترین کمک تو پیشرفتِ پروژه‌ست.
  2. در حال حاضر Rx فقط برای خوندن اطلاعات از اینترنت استفاده شده. اضافه کردن Rx به هر بخشی از پروژه یکی از کارهاییه که باید انجام داد.
  3.  Dependency Injection با استفاده از Dragger انجام نشده. 

هرچیزی که دانشش رو دارید و فکر می‌کنید توی پروژه دیده نشده رو اضافه کنید. 

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

پی‌نوشت2: حتما متوجه شدید که اسم پروژه یکمی نامربوطه دلیلش اینه که وقتی تصمیم گرفتم آموزش ویدیویی ضبط کنم پیش خودم گفتم با retrofit شروع کنم و بعد دیدم رتروفیت خیلی دمِ دستیه و خیلی آموزش هم زیاد داره برای همین تصمیم گرفتم رتروفیت رو با RxJava پیاده کنم. برای فهمیدن RxJava دیدم احتیاج هست که یکسری دیزاین پترن رو یاد بدم و در نهایت Rx بدون یک پترن خوب مثل MVC، MVP یا MVVM کاربردی نداره و عملا نمیشه از مزایاش استفاده کرد و خلاصه این شد که به اینجا رسیدم.

+2 0
پی نوشت یک رو خوب اومدی :) - لینک (7 سال پیش)
+2 0
لینک - پروژه ایشون برای سرگیجه عالیه :)) (7 سال پیش)
+1 0
:)) لطف کردی. حتما نگاه میکنم (7 سال پیش)
+1 0
لینک - این کتاب هم برنامه نویسی Reactive توی جاوا رو با RxJava یاد میده، مثال‌های کتاب هم توی این لینک هست (7 سال پیش)
0 0
چه نیازی هست RXJava رو با رتروفیت ترکیب کرد؟ خود رتروفیت درخواست ها رو async میفرسته! (7 سال پیش)
+1 0
آره async هست ولی مثلا از اینترنت یه چیزی رو میخونیم بعد براساس پاسخی که گرفتیم میخوایم یه درخواست دیگه بدیم و مجددا بر اساس پاسخش یک درخواست جدید... در این صورت ما سه تا درخواست تو دلِ هم داریم که هم کد رو ناخوانا کرده و هم اینکه مثلا اگه اکتیویتی بسته بشه چون درخواست‌ها داره توی یک ترد دیگه انجام میشه باز به کارش ادامه میده. اما با Rx اینجوری میشه که هروقت پاسخ اومد کارِ بعدی رو که یک تابع دیگست رو صدا میکنه و انجام میده که هم تابع‌ها تو در تو نیست و هم میتونیم خیلی ساده درخواست رو کنسل کنیم. بعلاوه مزایای استفاده از RxJava و توابعش رو هم خواهیم داشت. (7 سال پیش)
پاسخ به سوال 
masoud91  7 سال پیش
0 0

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

1. 4 تا interface  که تعریف میشه چه متد هایی باید الزاما داشته باشه .... این کد ها رو ببینید (interface MVP_Main ).... دارم از این لینک می خونم ....

http://smartlab.ir/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-mvp-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF/

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

پاسخ به سوال 
Rabbit  7 سال پیش
+2 0

 پاسخ صحیح

بالاخره یه کمی سرم خلوت شد و فرصت کردم یک پروژه کامل رو بر اساس MVP پیاده‌سازی کنم. اغلب روش‌های پیاده‌سازی مختلف برای پترن mvp رو که تو اینترنت پیدا کردم رو بررسی کردم (از جمله روش قبلی خودم که همینجا صحبتشو کردیم) و به نظرم این شیوه‌ای که الان معرفی می‌کنم خیلی بهتر از روش‌های دیگه‌ست.

سورس پروژه پر از کامنته و فکر می‌کنم واضح باشه که چی کار میکنه. میتونید اینجا سورس رو مشاهده کنید.

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

مورد مهم در مورد این پروژه اینه که از هیچ کتابخونه‌ای استفاده نشده و به طور کامل با استفاده از امکانات اندروید نوشته شده. یک نسخه دیگه از همین پروژه note رو هم آماده کردم که مشابه همین هست و فقط اینکه از تمام کتابخونه‌هایی که این روزها trend شدن استفاده کرده. 

لینک پروژه دوم همراه با آموزشش رو هم به زودی به همین پاسخ اضافه می‌کنم.

0 0
اینجور ک من داخل مثال شما دیدم ویو شما با مدلتون مستقیم در ارتباط بود. توی mvp ویو و مدل فقط میتونند با presenter در ارتباط باشند (7 سال پیش)
+1 0
فکر می‌کنم اشتباه کردید، view هیچ ارتباطی با model نداره و از طریق presenter میتونن با هم کار کنن (7 سال پیش)

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