WordPress DemoSite

Тестовый сайт для экспериментов и демонстраций возможностей

MVP (Model-View-Presenter) — паттерн архитектуры для разделения логики и интерфейса

MVP — это улучшенная версия MVC, где Presenter заменяет Controller и берет на себя всю бизнес-логику, делая код более тестируемым и поддерживаемым.

🔥 Основные компоненты MVP

КомпонентРольПример в Android/Kotlin
ModelДанные и бизнес-логика (например, работа с API, БД).UserRepository, ApiService
ViewОтображение данных и взаимодействие с пользователем (пассивный слой).Activity, Fragment, View в iOS
PresenterПосредник между Model и View. Обрабатывает события, запрашивает данные, обновляет View.LoginPresenter

Как работает MVP?

  1. View получает действие пользователя (например, нажатие кнопки).
  2. View сообщает об этом Presenter.
  3. Presenter запрашивает данные у Model.
  4. Model возвращает результат (например, список пользователей).
  5. Presenter передает данные View для отображения.

🛠 Пример MVP в Android (Kotlin)

1. Model (Repository)

class UserRepository {  
    fun getUsers(): List<String> {  
        return listOf("Alice", "Bob", "Charlie")  // Данные из "базы"  
    }  
}  

2. View (Activity/Fragment)

interface UserView {  
    fun showUsers(users: List<String>)  
}  

class UserActivity : AppCompatActivity(), UserView {  
    private lateinit var presenter: UserPresenter  

    override fun onCreate(savedInstanceState: Bundle?) {  
        super.onCreate(savedInstanceState)  
        presenter = UserPresenter(this, UserRepository())  
        presenter.loadUsers()  
    }  

    override fun showUsers(users: List<String>) {  
        recyclerView.adapter = UserAdapter(users)  // Обновляем UI  
    }  
}  

3. Presenter

class UserPresenter(  
    private val view: UserView,  
    private val repository: UserRepository  
) {  
    fun loadUsers() {  
        val users = repository.getUsers()  
        view.showUsers(users)  // Передаем данные во View  
    }  
}  

🌟 Преимущества MVP

Тестируемость: Presenter можно тестировать без View (MockView).
Разделение ответственности: View только рисует, Presenter управляет логикой.
Гибкость: Легко заменить View (например, Activity на Fragment).


📉 Недостатки MVP

Boilerplate-код: Нужно создавать интерфейсы для View.
Ручное управление жизненным циклом: Presenter может «пережить» View (риск утечек памяти).


🆚 MVP vs. MVVM

КритерийMVPMVVM
Связка View-логикаЧерез интерфейсыЧерез Data Binding / LiveData
ТестируемостьЛегко (MockView)Легко (MockViewModel)
ПоддержкаРучнаяАвтоматическая (Android AAC)

Когда выбирать MVP?

Когда выбирать MVVM?


🚀 MVP в других платформах

iOS (Swift)

protocol UserViewProtocol: AnyObject {  
    func showUsers(_ users: [String])  
}  

class UserPresenter {  
    weak var view: UserViewProtocol?  
    private let repository = UserRepository()  

    func loadUsers() {  
        let users = repository.getUsers()  
        view?.showUsers(users)  
    }  
}  

Web (JavaScript)

class UserPresenter {  
    constructor(view, repository) {  
        this.view = view;  
        this.repository = repository;  
    }  

    loadUsers() {  
        const users = this.repository.getUsers();  
        this.view.showUsers(users);  
    }  
}  

💡 Советы по MVP

Используйте DI (Dagger, Koin) для передачи зависимостей в Presenter.
Избегайте утечек:


🔥 Вывод

MVP — это классический паттерн для:
✅ Чистой архитектуры.
✅ Простых и средних проектов.
✅ Платформ без встроенной поддержки MVVM (например, iOS до SwiftUI).

Что учить дальше?

Полный стэк: .NET | AMQP | Android | api | Bash | Bootstrap | C++ | cms | Composer | css | Data | Elasticsearch | ESP32 | Git | GraphQL | Gulp | JavaScript | JetStream | Joomla | js | Kotlin | Laravel | LEMP | Linux | LMS | Markdown | MODX | Moodle | MySQL | NATS | Nginx | Node.js | OpenCart | Parsedown | PHP | Python | RabbitMQ | SCSS | SEO | Simpla | SOAP | SQL | startup | Swift | Symfony | Tailwind | Translation | Twig | Ubuntu | Unit | web3 | Webasyst | Webpack | WebSocket | WordPress | XML | Бизнес | блокчейн | ИИ | интернет-магазин | ЛК | Руководство | ТЗ | фреймворк | Яндекс.Трекер