یکشنبه ۲۱ آبان ۰۲ | ۱۶:۱۴ ۱۷۱ بازديد
کد های اینترفیس LoginView به طور پایین هست :
package com.elecomco.simplemvp.view;
public interface LoginView {
void loginValidations();
void loginSuccess();
void loginError();
}
همانگونه که مشاهده میکنید ۳ بدنه تابع درین اینترفیس ساخت و ساز کرده ایم تا هنگام ارث بری از اینترفیس طراحی اپلیکیشن در مشهد آنان را طراحی کنیم .
یک بدنه تابع با اسم preFormLogin در اینترفیس LoginPresenter ساختوساز کرده که مشمول ۲ ورودی از نوع حرفه است. در واقع میخواهیم یوزر نیم و پسورد دراین اینترفیس گرفته خواهد شد. یا این که عالی بگم ورودی ها رو از لایه Presenter اخذ میکنیم.
package com.elecomco.simplemvp.presenter;
public interface LoginPresenter {
void preFormLogin(String userName,String password);
}
اکنون یه کلاس می خوایم که از اینترفیس LoginPresenter ارث بری کنه (implements) ، و توابع اون رو طراحی کنه. در پکیج model که در واقع نقش لایه سبک رو بازی می کنه، یه کلاس نو با اسم PresenterImpl می سازیم .کد های این کلاس به طور ذیل است:
package com.elecomco.simplemvp.model;
import android.text.TextUtils;
import com.elecomco.simplemvp.presenter.LoginPresenter;
import com.elecomco.simplemvp.view.LoginView;
public class PresenterImpl implements LoginPresenter {
LoginView mLoginView;
public PresenterImpl(LoginView mLoginView) {
this.mLoginView = mLoginView;
}
@Override
public void preFormLogin(String userName, String password) {
if(TextUtils.isEmpty(userName) || TextUtils.isEmpty(password)){
mLoginView.loginValidations();
}else {
if(userName.equals("mohammad") && password.equals("123")){
mLoginView.loginSuccess();
}else {
mLoginView.loginError();
}
}
}
}
همانگونه که مشاهده میکنید ورودی Constractor ما به عبارتی اینترفیسی میباشد که در لایه ویو ساخت و ساز کرده ایم. یوزر نیم و پسورد را بررسی میکنیم. درصورتی که مقدار آنان خالی بود تابع loginValidations فراخوانی می گردد. در شرایطیکه مقدار آنان موازی مقادیر دلخواه خودم بود تابع loginSuccess و در صورتی مقادیر وارداتی نادرست بود ، تابع loginError فراخوانی میگردد.
در اینجا به طور کامل تفویض از view گرفته گردیده است و به هیچ عنوان نمیداند از کجا گرفته میشوند و به چه شکلی طراحی میگردند. لایه سبک داده ها را از لایه Presenter اخذ می نماید و view صرفا یک صورت نمایشی دارااست و امرها اساسی را لایه Presenter تولید می نماید و لایه View صرفا اطاعت می نماید.
حال میرسیم به کدنویسی اکتیویتی :
package com.elecomco.simplemvp.activities;
import android.support.v7.app.AppCompatActivity;
import android.سیستم عامل.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.elecomco.simplemvp.R;
import com.elecomco.simplemvp.model.PresenterImpl;
import com.elecomco.simplemvp.presenter.LoginPresenter;
import com.elecomco.simplemvp.view.LoginView;
public class LoginActivity extends AppCompatActivity implements View.OnClickListener, LoginView {
EditText etUserName,etPassword;
TextView tvLogin;
LoginPresenter mLoginPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
etUserName=findViewById(R.id.etUserName);
etPassword=findViewById(R.id.etPassword);
tvLogin=findViewById(R.id.tvLogin);
tvLogin.setOnClickListener(this);
mLoginPresenter=new PresenterImpl(LoginActivity.this);
}
@Override
public void onClick(View v) {
String userName=etUserName.getText().toString();
String password=etPassword.getText().toString();
mLoginPresenter.preFormLogin(userName,password);
}
@Override
public void loginValidations() {
Toast.makeText(this, "Please Enter username and password!", Toast.LENGTH_SHORT).show();
}
@Override
public void loginSuccess() {
Toast.makeText(this, "Login Success!", Toast.LENGTH_SHORT).show();
}
@Override
public void loginError() {
Toast.makeText(this, "Login Failure!", Toast.LENGTH_SHORT).show();
}
}
این معمولی ترین پروژه ای بود که برای معنی معماری MVP در اندروید ساخت و ساز کردیم. همچنین که میبینید محتوای ادیت تکست ها دیگه در لی اوت بررسی نمیشن، لی اوت ما دیگه اینجا هیچ کاره می باشد و صرفا موقعیت نمایشی داره. شغل های مهم رو لایه Presenter داره ایفا میده . درحال حاضر اگه بخواین اکتیویتی رو به فرگمنت تبدیل فرمائید ، خیلی شل و سوای اینکه در برنامتون تغییری ساخت بشه ، این شغل رو جاری ساختن میدین .
تو پروژه های بلندمرتبه میتونید با معماری MVP آپ دیت هاتون رو به راحتی و در کمترین مجال ایفا به این و نیاز وجود ندارد تمام برنامتون رو از اولیه بنویسید . فرض فرمایید اینستاگرام بخواد یه آپشن نو به اپلیکیشنش اضاف کنه ، در صورتیکه از آغاز معماریش صحیح طراحی نشه ، مجبوره خیلی از قسمتای نرمافزار نویسی رو تمیز کنه و از نخستین به یه صورت دیگه بنویسه .
امروزه موسسه ها گرانقدر برای اسخدام اپلیکیشن نویس اندروید یک کدام از شرط هاشون اشراف اپ نویس به معماری MVP میباشد. امیداست شما هم با اموزش معماری MVP در اندروید به یک نرم افزار نویس حرفهای تبدیل گردیده باشید.
اصول روانشناسی طراحی اپلیکیشن که باید بدانید