• 01-03-2017, 23:31:39
    #1
    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.)
  • 02-03-2017, 01:10:05
    #2
    Model ile presenter ı harmanlama lafını pek anlamadım ama soyle soyliyim. Servisten veya sqlite tan gelen datayı presenter a aktarman lazım presenter da bu datayı işleyip activity e aktarabilirsin.
  • 02-03-2017, 09:34:21
    #3
    https://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:53
    #4
    hknnn adlı üyeden alıntı: mesajı görüntüle
    Model ile presenter ı harmanlama lafını pek anlamadım ama soyle soyliyim. Servisten veya sqlite tan gelen datayı presenter a aktarman lazım presenter da bu datayı işleyip activity e aktarabilirsin.
    Bilgi için teşekkürler hocam.

    //// 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:58
    #5
    Hocam 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:30
    #6
    hknnn adlı üyeden alıntı: mesajı görüntüle
    Hocam 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.

    https://github.com/antoniolg/androidmvp

    Bu orneği ben beğendim ilk başta bunu incelemenizi tavsiye ederim. Buna benzer yapabilirsiniz.

    İyi çalışmalar
    Bilgiler için teşekkür ederim. Verdiğiniz repo adresini inceledim ve basit bir mantıkla kendi sistemimi oluşturdum örnek amaçlı.

    (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:03:27
    #7
    startactivity ve toast mesajı gibi seyleri i activity icinde yapsanız daha iyi olur. bir interface ile yapıcagınız isleme gore activity icindeki komutları tetiklersiniz.
  • 05-03-2017, 01:41:08
    #8
    hknnn adlı üyeden alıntı: mesajı görüntüle
    startactivity ve toast mesajı gibi seyleri i activity icinde yapsanız daha iyi olur. bir interface ile yapıcagınız isleme gore activity icindeki komutları tetiklersiniz.
    Peki bu şekilde bir zararı var mı? Kodlamayı bu şekilde yapınca daha düzenli gözüküyor gözüme de

    //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:31
    #9
    http://gturedi.blogspot.com.tr/2016/...yarlamasi.html
    Şu kaynağıda tavsiye ederim