Android - Mengapa menggunakan Antarmuka dianggap sebagai praktik terbaik dalam berkomunikasi antara Aktivitas dan Fragmen?

Dalam dokumentasi "Berkomunikasi dengan Fragmen Lain", Google memberi tahu kita bahwa praktik terbaik untuk mengomunikasikan Aktivitas dan Fragmen adalah dengan mengimplementasikan antarmuka. Antarmuka ini kemudian dapat dipanggil oleh Fragment dan mengeksekusi perilaku yang diperlukan dalam Aktivitas.

Namun ada juga cara hack untuk melakukan ini. Dapatkan Aktivitas secara langsung dengan metode "getActivity()" dan kemudian kita dapat menggunakan semua "metode publik" di bawahnya.

Ini cukup membingungkan saya. Karena saya tidak bisa memikirkan kerugian kritis apa pun dalam menggunakan cara hack untuk melakukan ini.

Keuntungan dari pendekatan pertama yang muncul di kepala saya adalah:

  1. Saya dapat membatasi "aksesibilitas sumber daya" di bawah Aktivitas saya. Namun karena Fragmen dapat memanggil "getActivity()", maka Fragmen tersebut sebenarnya dapat mengakses semua metode "publik" di dalamnya. Jadi ini tidak bisa meyakinkan saya.
  2. Lebih mudah dibaca dan bercerita dalam kode. Dengan pendekatan pertama, kode memberi tahu kita bahwa "Aktivitas ini hanya membuka area spesifik yang dapat diakses untuk Fragmen". Kita dapat mengetahui "Apa yang ada di dalam Fragmen dapat mengganggu Aktivitas" secara langsung hanya dengan melihat kode di Aktivitas. Atau yang lain, kita perlu membuka kode di bawah Fragment untuk melihat fungsinya.

Baiklah, setelah saya rangkum, saya sedikit yakin pada diri saya sendiri. Tapi sejujurnya, saya sangat menginginkan alasan lain yang kuat dan harus melakukan ini. Ide atau dokumentasi apa pun akan sangat dihargai!!


person KunYu Tsai    schedule 09.03.2015    source sumber
comment
Ada banyak alasan mengapa Anda harus menggunakan antarmuka, bukan hanya memanggil metode publik. Cukup cari di Google saja.   -  person code monkey    schedule 09.03.2015
comment
@QuentinTsai: apakah Anda sudah melihat jawaban saya?   -  person Y.S    schedule 15.03.2015
comment
@ZygoteInit Ya! Maaf atas balasan saya yang terlambat, saya pernah sakit sebelumnya. Saya telah memeriksa semua jawaban Anda, semuanya sangat membantu. Tapi maaf saya boleh memberikan jawaban yang tepat kepada Reinier karena bagi saya itu sangat mengingatkan saya pada sesuatu yang tidak saya sadari sebelumnya. Terima kasih semuanya !!   -  person KunYu Tsai    schedule 19.03.2015


Jawaban (3)


Yang terpenting, keuntungan utamanya adalah modularitas kode Anda. Saat Anda langsung memanggil kelas "induk" dari kelas "anak", Anda membuat ketergantungan siklik . Artinya, Anda tidak dapat mengganti salah satu tanpa mengubah yang lain. Pendekatan ini sering kali menghasilkan kode spaghetti yang sulit dipertahankan, bahkan lebih sulit untuk diperluas, dan hampir tidak mungkin diganti tanpa upaya pemfaktoran ulang yang besar.

Sebagai contoh: jika Anda memanggil metode publik Activity Anda langsung dari Fragment, Anda tidak akan dapat menggunakan kembali Fragmen Anda di Aktivitas lain tanpa menerapkan solusi peretasan (seperti if(getActivity() instanceof A) {...} else {...}), dan Anda juga tidak dapat menukar Aktivitas Anda dengan misalnya kelas pengontrol, atau solusi lain apa pun yang Anda temukan.

Jika Anda kesulitan memahami subjek ini, saya sangat menyarankan Anda untuk membaca buku Jawa yang Efektif.

person Reinier    schedule 09.03.2015

Tidak ada “keuntungan” yang melekat dalam pendekatan ini, selain itu

  • itu adalah idiom yang dapat dikenali. Menggunakan antarmuka adalah cara umum di mana dua kelas berkomunikasi satu sama lain di Java.
  • kode yang sama dapat digunakan kembali di banyak Fragments & Activitys yang berbeda.
  • ini mengikuti prinsip umum modularitas & abstraksi, di mana Fragment "memberi tahu" Activity bahwa ia telah mencapai keadaan tertentu, dan Activity menentukan perilakunya sendiri sehubungan dengan keadaan ini.
person Y.S    schedule 09.03.2015
comment
Saya pikir yang kedua harusnya fragment yang sama dapat digunakan dari lebih banyak activities (Ini dapat dilakukan setelah getActivity() tetapi dengan pemeriksaan dan gips berikutnya...) - person DNax; 09.03.2015
comment
@ZygoteInit Sudah melakukannya!! Saat Anda memberikan jawaban ini! Saya segera memberi suara positif! Terima kasih : ) !! - person KunYu Tsai; 19.03.2015

Saya pikir sebagian besar keuntungan dari pendekatan berbasis antarmuka adalah karena modularitasnya yang terkenal dan mudah dibaca serta tingkat abstraksi yang cukup tinggi sebagai sudut pandang rekayasa perangkat lunak.

Misalkan Anda berada dalam kerja tim dan setiap rekan satu tim bertanggung jawab atas salah satu komponen ini, misalnya, Anda harus mengimplementasikan bagian itu dan saya harus mengimplementasikan aktivitas itu. Jadi karena jarak kita terlalu jauh, kita harus menyepakati antarmuka bersama sebagai standar di antara kita dan kemudian kita harus mengimplementasikan komponen-komponen yang memenuhi standar tersebut, dalam hal ini antarmuka yang kita sepakati. Juga dalam pertimbangan rekayasa perangkat lunak, sistem perangkat lunak berbasis komponen terdiri dari sejumlah komponen yang bertindak secara independen satu sama lain dan interaksinya hanya dilakukan melalui antarmuka bersama standar dan materi di dalam setiap komponen bersifat transparan bagi yang lain.

Oleh karena itu dalam kasus Anda, Activity dan Fragment harus dianggap sebagai dua komponen terpisah dan masing-masing tidak mengetahui detail tentang komponen lainnya. Dan inilah antarmuka Java yang muncul.

person frogatto    schedule 10.03.2015