← Назад к вопросам

Как выглядит модель в проекте

1.3 Junior🔥 162 комментариев
#Архитектура и паттерны#Работа с данными

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Модель в Android проекте

В контексте разработки под Android, модель (Model) — это часть архитектуры приложения, которая отвечает за представление данных, бизнес-логику и их обработку. В современных проектах модель реализуется через набор классов, структур и компонентов, которые обеспечивают абстракцию над данными.

Основные компоненты модели

1. Data Classes / POJO Это базовые классы, представляющие сущности. Они содержат только данные без поведения.

// Kotlin data class (рекомендуется)
data class User(
    val id: Long,
    val name: String,
    val email: String,
    val createdAt: Date
)

// Java POJO
public class User {
    private Long id;
    private String name;
    private String email;
    
    // Геттеры, сеттеры, equals, hashCode
}

2. Repository Класс, который абстрагирует источник данных (например, локальная база, сетевой API).

interface UserRepository {
    suspend fun getUser(id: Long): User
    suspend fun saveUser(user: User)
}

class UserRepositoryImpl(
    private val localDataSource: UserLocalDataSource,
    private val remoteDataSource: UserRemoteDataSource
) : UserRepository {
    override suspend fun getUser(id: Long): User {
        // Логика: сначала проверяем локально, потом сеть
        return localDataSource.getUser(id) ?: remoteDataSource.getUser(id)
    }
}

3. Data Sources Конкретные реализации для работы с различными источниками.

// Локальный источник (Room Database)
class UserLocalDataSource(private val dao: UserDao) {
    fun getUser(id: Long): User? = dao.getById(id)
}

// Сетевой источник (Retrofit)
class UserRemoteDataSource(private val api: UserApi) {
    suspend fun getUser(id: Long): User = api.fetchUser(id)
}

4. DAO (Data Access Object) Интерфейс для работы с базой данных, например, при использовании Room.

@Dao
interface UserDao {
    @Query("SELECT * FROM users WHERE id = :id")
    fun getById(id: Long): User?
    
    @Insert
    fun insert(user: User)
}

5. Entity Класс, представляющий таблицу в базе данных (в Room).

@Entity(tableName = "users")
data class UserEntity(
    @PrimaryKey val id: Long,
    @ColumnInfo(name = "user_name") val name: String,
    val email: String
)

Типичная структура в современных архитектурах

В архитектурах типа MVVM, MVI или Clean Architecture, модель распределяется по слоям:

  • Domain Layer: Содержит бизнес-модели (entities) и бизнес-логику (use cases/interactors).
  • Data Layer: Включает репозитории, источники данных, DAO и API модели.
  • Presentation Layer: Может содержать ViewModels или Presenters, но сами данные они получают из модели.

Пример полной модели в Clean Architecture

// Domain Layer
data class User(
    val id: Long,
    val name: String
)

class GetUserUseCase(private val repository: UserRepository) {
    suspend operator fun invoke(id: Long): User = repository.getUser(id)
}

// Data Layer
interface UserRepository {
    suspend fun getUser(id: Long): User
}

class UserRepositoryImpl(
    private val localDataSource: UserDataSource,
    private val remoteDataSource: UserDataSource
) : UserRepository {
    // Реализация с стратегией кэширования
}

Ключевые принципы построения модели

  • Инкапсуляция: Модель скрывает детали реализации источников данных.
  • Абстракция: Использование интерфейсов для репозиториев и источников.
  • Тестируемость: Модель легко тестируется из-за четкого разделения обязанностей.
  • Независимость от UI: Модель не содержит ссылок на Android Context или View компоненты.

В современной Android разработке модель — это не просто класс данных, а целая иерархия компонентов, обеспечивающая надежную, тестируемую и масштабируемую работу с данными. Использование подходов типа Clean Architecture и библиотек (Room, Retrofit) позволяет создавать модели, которые легко адаптируются к изменениям требований.

Как выглядит модель в проекте | PrepBro