Merhaba arkadaşlar 2-3 yıldır Android ile başlangıç düzeyde uğraşıyorum. Son zamanlarda PHP'de MVC yapısına az-çok vakıf olmamın ertesinde bu sistemin benzerinin Android'de MVP (Model/View/Presenter) olarak kullanıldığını öğrendim ve şu sıralar hâlâ yazmaya devam ettiğim bir uygulamamda bu sistemi kullanmaya çalışıyorum ancak sanırım ben Model ve Presenter'ı birbirine harmanladığım için sistemim genel olarak verinin geldiği ve kullanılabilir forma dönüştürüldüğü yer ile bu son halin gösterildiği view (activity class) halinde.
Benim sorum: Model ve presenter'ı nasıl birbirinden ayırabilirim? Ya da yukarıda ki yöntemim de kullanılabilir mi?
Not: Uygulamam bir çeşit sosyal ağ benzeri yapı (Veritabanı ve web servisleri hali hazırda yazdım/yazmaktayım.)
Android MVP İle İlgili Bilgi Gerek!
8
●992
- 01-03-2017, 23:31:39
- 02-03-2017, 09:34:21https://medium.com/@tinmegali/model-...8fe#.b4krw555n
Şu seriyi takip edebilirsin.
MVP'nin MVC'den farkı MVC'de model direk datayı view'e bind edebilir.
MVP'de ise presenter'e iletir o işi presenter halleder. - 02-03-2017, 21:40:53Bilgi için teşekkürler hocam.hknnn adlı üyeden alıntı: mesajı görüntüle
//// Basit bir MVP sistemi şu şekilde mi olur?
MainActivity
... UserPrensenter.login(email,password); ..
UserPrensenter.login
... String email, String password response= UserModel.sendData(email,password); if(response== true){ startActivity(bla bla bla); SharedPreferences blablabla }else{ doNothing(); } ..UserModel.sendData
... String email, String password ... Veritabanı bağlantı kodları ... if(kullaniciVar == true){ return true; }else{ return false; } ..Böyle olunca ben UserModel'de yazdığımı UserPresenter'da yazsamda aynı sonuca ulaşmış olmam mı? - 02-03-2017, 22:22:58Hocam yazdıgınız kodda mvp mantıgına ters seyler var. UserModel de yaptıgınızı presenterın icindede yapabilirsiniz. Ama dogru degil. Mvp nin kullanım amacı kodu katmanlara bölerek temiz kod (clean code) yazmak. Temiz bir kod yazarak hatanın nerede hangi katmanda oldugunu kolayca anlayabilirsiniz. Test etmeniz ve test yazmanızda kolaylaşır.
Ve kodunuzda gördüğüm kadarıyla presenter class ının içinde startactivity yapıyorsunuz. View ile activity ile ilgili islemlerin hepsini activity de yapmanız gerekiyor mvp ye göre Presenter sadece bir aracı presenterdan data istersiniz presenter gidip service ten veya database ten baska bir class aracılıgıyla datayı alır sonra oda interfaceler yardımıyla datayı activity aktarır. Presenter sadece aracıdır gerektiginden fazla is yaptırmaya kaltıgınızda mvp nin avantajlarından faydalanmamıs olursunuz. Data aktarımınıda interface yardımıyla yapmanız gerekiyor görüdügüm kadarıyla interface kullanmıyorsunuz.Size tavsiyem internette biraz daha mvp yi arastırmanız kodları kurcalamanız
https://github.com/antoniolg/androidmvp
Bu orneği ben beğendim ilk başta bunu incelemenizi tavsiye ederim. Buna benzer yapabilirsiniz.
İyi çalışmalar - 04-03-2017, 23:06:30Bilgiler için teşekkür ederim. Verdiğiniz repo adresini inceledim ve basit bir mantıkla kendi sistemimi oluşturdum örnek amaçlı.hknnn adlı üyeden alıntı: mesajı görüntüle
(Verdiğiniz repo adresinde ki gibi interactor kullanmadım ihtiyaç yok diye)
Şu an yaptığım sistem şu şekilde. Bi göz atıp eğer bu mantık doğru mu değil mi diye kontrol edebilir misiniz? Buna göre yaptığım uygulama da fazla ileri gitmeden mvp'ye çevireyim
Şimdiden teşekkür ederim.
Bunlar class'lar;

MainActivity.java
public class MainActivity extends AppCompatActivity{ private mainPresenter presenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); presenter = new mainPresenterImpl(this); presenter.validate("admin","1234"); } }mainPresenter.java
public interface mainPresenter { void validate(String email, String password); }mainPresenterImpl.java // Sanırım mainPresenter'a ekleyebilirim bunu ancak ortalık karışmasın diye ayrı bir dosya daha iyi olur sanırım.
public class mainPresenterImpl implements mainPresenter { private Activity activity; mainModel mainModel = new mainModel(); public mainPresenterImpl(Activity activity) { this.activity = activity; } @Override public void validate(String email, String password) { if (mainModel.validate(email,password).equals("success")){ activity.startActivity(new Intent(activity, HomeActivity.class)); }else{ Toast.makeText(activity,"Hatalı",Toast.LENGTH_SHORT).show(); } } }
mainModel.java
public class mainModel { public String validate(String username, String password) { if (username.equals("admin") && password.equals("1234")) { return "success"; } else { return "error"; } } } - 05-03-2017, 01:41:08Peki bu şekilde bir zararı var mı? Kodlamayı bu şekilde yapınca daha düzenli gözüküyor gözüme dehknnn adlı üyeden alıntı: mesajı görüntüle

//Bir de MVP sanırım bu oluyor o zaman uygulamamı bu sisteme geçirebilirim!
Sizi de rahatsız ediyorum kusura bakmayın. - 05-03-2017, 17:53:31http://gturedi.blogspot.com.tr/2016/...yarlamasi.html
Şu kaynağıda tavsiye ederim

