Sobes.tech
Middle

Parlez-moi plus en détail du modèle MVP (Model-View-Presenter).

sobes.tech IA

Réponse de l'IA

Le MVP divise l'application en trois composants interactifs:

  • Modèle: Gère les données de l'application et la logique métier. Il ne dépend pas de l'interface utilisateur.
  • Vue: Affiche les données à l'utilisateur et traite ses entrées. Elle est passive et ne contient pas de logique décisionnelle.
  • Présentateur: Sert d'intermédiaire entre le Modèle et la Vue. Il reçoit les données du Modèle et les formate pour la Vue. Il réagit aux événements de la Vue et met à jour le Modèle. La Vue fait référence au Présentateur, et le Présentateur à la Vue via une interface.

Avantages du MVP:

  • Résistance aux changements de l'UI: La logique est dans le Présentateur, qui ne dépend pas d'une implémentation spécifique de la Vue.
  • Testabilité: Le Présentateur est facile à tester isolément, sans avoir besoin de simuler l'UI.
  • Séparation des responsabilités: La division claire des rôles entre les composants améliore la maintenabilité du code.

Exemple:

// Interface de Vue
interface MainView {
    fun showData(data: String)
    fun showError(message: String)
}

// Présentateur
class MainPresenter(private val view: MainView, private val model: MainModel) {

    fun loadData() {
        val data = model.getData()
        if (data != null) {
            view.showData(data)
        } else {
            view.showError("Échec du chargement des données")
        }
    }
}

// Modèle
class MainModel {
    fun getData(): String? {
        // Chargement des données
        return "Données d'exemple"
    }
}

// Activité (Implémentation de la Vue)
class MainActivity : AppCompatActivity(), MainView {

    private lateinit var presenter: MainPresenter
    private lateinit var textView: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        textView = findViewById(R.id.textView)

        val model = MainModel()
        presenter = MainPresenter(this, model)
        presenter.loadData()
    }

    override fun showData(data: String) {
        textView.text = data
    }

    override fun showError(message: String) {
        textView.text = message
    }
}