سورس ربات تلگرام جذب بازدید و جذب ممبر
سورس ربات تلگرام جذب بازدید و جذب ممبر
2019-03-17
آموزش گام به گام عملیات CRUD با لاراول 5.8
آموزش گام به گام عملیات CRUD با لاراول 5.8
2019-03-22

معماری mvp در اندروید با کاتلین

معماری mvp در اندروید با کاتلین

معماری mvp در اندروید با کاتلین

معماری mvp در اندروید با کاتلین ، نحوه استفاده از معماری MVP ، همیشه برای برنامه نویسی با هر زبانی و برای هر پلتفرمی نیاز به رعایت اصول و قوانینی می باشد.تمیز نویسی و کوتاه نویسی همیشه به برنامه نویس لذت می بخشد. کدهای اصولی به راحتی قابل تغییر و منعطف هستند و قابلیت تست راحتری دارند و خود مستند هستند.

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

Model–View–Presenter

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

معماری mvp (Model-View-Presenter) در اندروید با کاتلین

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

معماری MVP یکی از بهترین معماری جدا کردن لایه نمایشی از لایه منطق تجاری یا Business Logic Layer می باشد.
معماری MVP به ما این امکان را می دهد تا به راحتی الگویی از معماری پیشرفته را پیاده سازی و اجرا کنیم. مانند الگوی کامل Clean Architecture.

ما در این مقاله بررسی میکنیم که نحوه استفاده از معماری MVP چگونه است؟ و ما چگونه می توانیم با استفاده از کاتلین آن را اجرا کنیم

معماری mvp در اندروید با کاتلین
معماری mvp در اندروید با کاتلین

View

همان بخشی است که کاربر با نصب اپلیکیشن آن را می بیند و با آن ارتباط برقرار میکند در واقع در معماری mvp عملیات کاربر را به  presenter منتقل میکند. و ترکیبی از Activity/Fragment/View و رابط کاربری می باشد. و هر زمان که نیاز به انجام عملی باشد عملکردی متفاوت از presenter را برای شی انجام میدهد و دارای منطق تجاری نمی باشد و به صورت مستقیم با مدل ارتباطی ندارد.
Xml فایل ها یک بخش از لایه view هستند و همچنین Adapter ها هم یک بخش از view می باشد.

نمونه ای از کدهای لایه view با کاتلین

//Activity/Fragment/View implements interface
class MainActivity : AppCompatActivity(), MainView {
// Initialize Presenter (also Model in the constructor of Presenter) & has object of Presenter
private lateinit var mainPresenter: MainPresenter
override fun onCreate(savedInstanceState: Bundle?) {
//...
mainPresenter = MainPresenter(this, MainInteractor())
mainPresenter.getData()
}

//...
override fun setData(arrUpdates: List<DataItem>) {
// Show data on UI
}
override fun setDataError(strError: String) {
// Show error on UI
}
override fun onDestroy() {
// Destroy View
mainPresenter.onDestroy()
super.onDestroy()
}
}
===================================
// Interface (acts as a contract between View and Presenter)
interface MainView {
fun showProgress()
fun hideProgress()
fun setData(arrUpdates: List<DataItem>)
fun setDataError(strError: String)
}

Presenter

به زبان ساده میتوان گفت در معماری mvp لایه Presenter به عنوان واسط بین model و view عمل میکند.و یک کلاس جداگانه است که نباید Android context داشته باشد.
Presenter در واقع شامل منطق های اپلیکیشن از جمله رفتارها یا رویدادها و هر عملیاتی که صورت میگیرد هست و به بروزرسانی مدل پاسخ میدهد و وضعیت ارائه در لایه view  را کنترل می کند.
Presenter دارای آبجکت View و Model است و دسترسی مستقیم به عناصر ui برنامه را ندارد.
Presenter بر اساس view ساخته می شود یعنی پیاده سازی کد های Presenter به لایه view  محدود میگردد ، این گفته به صورت رایج قابل قبول می باشد ، به این دلیل که view یک کلاس ساده است و نیازی نیست که تست شود.همچنین Presenter احتمال تغییر کدهایش کم می باشد.
زمانی که presenter مجموعه ای از اطلاعات را در view قرار می دهد یا یک رویدادی توسط کاربر اتفاق می افتد، view تغییر می کند.
Presenter مدل را دریافت و نمایش می دهد در واقع بخش model را در view  نمایش میدهد.

نمونه ای از کدهای لایه Presenter با کاتلین

// Presenter has the object of both View and Model(Interactor)
// Implements OnFinishedListener to listen for Interactor response
class MainPresenter(private var mainView: MainView?, private val mainInteractor: MainInteractor):
MainInteractor.OnFinishedListener {
fun getData() {
mainView?.showProgress()
mainInteractor.requestGetDataAPI(this)
}
override fun onResultSuccess(arrUpdates: List<DataItem>) {
mainView?.hideProgress()
mainView?.setData(arrUpdates)
override fun onResultFail(strError: String) {
mainView?.hideProgress()
mainView?.setDataError(strError)
}
// Destroy View when Activity destroyed
fun onDestroy() {
mainView = null
}
}

Model

بخواهیم مدل را به زبان ساده بیان کنیم می توانیم بگوییم که مدل وظیفه اش ارتباط بین برنامه و دیتا است.در واقع میتوان گفت یک منبع اطلاعات قابل نمایش در view می باشد.مدل تنها لایه ای هست که منطق تجاری یا business logic را به خوبی اجرا می کند و به صورت جداگانه بدون view قابل تست می باشد.
مدل از وجود view و Presenter هیچ آگاهی ندارد.اگر تغییری در مدل ایجا شود باید Presenter حتما از آن تغییر آگاه شود.

نمونه ای از کدهای لایه Model  در کاتلین

class MainInteractor {
interface OnFinishedListener {
fun onResultSuccess(arrUpdates: List<DataItem>)
fun onResultFail(strError: String)
}
fun requestGetDataAPI(onFinishedListener: OnFinishedListener) {
// Get data from server
}
}

نتیجه کلی از نحوه ی کار معماری mvp

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

ارتباط مستقیم از:

View ==> Presenter ==> Model

ارتباط غیر مستقیم از قرارداد رابط کاربری :

Model =/=> Presenter =/=> Vie

تصویر زیر اطلاعات خوبی را از معماری mvp  بیان میکند ، این تصویر بیان گر نمودار جریانی از معماری mvp  در اندروید می باشد و درک کاملی از این معماری در اندروید را نشان می دهد.

معماری mvp در اندروید با کاتلین
معماری mvp در اندروید با کاتلین

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

نمونه ای از معماری mvp  در کاتلین

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

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *