🤝 Создание собственной версии UseCase в 2023 году: гибкий и функциональный подход



Зачем создавать собственную версию UseCase? Причина очевидна: у каждого из нас уникальный опыт и свои подходы к решению проблем. Делясь собственной версией UseCase, я не опровергаю идеи других разработчиков.



В разработке программного обеспечения

UseCase  — это описание конкретного действия или взаимодействия, которое система или приложение выполняет для достижения определенной цели субъекта (пользователя или другой системы).

В нем описываются “шаги” и взаимодействия между различными компонентами, чтобы продемонстрировать, как конкретная функциональность используется в системе. UseCase часто используется для фиксирования “функциональных требований” и определения поведения системы с точки зрения ее пользователей.



Что такое UseCase в гибкой и функционально чистой архитектуре?

В контексте Fluent and Fun Clean Architecture (гибкой и функционально чистой архитектуры) UseCase служит более всеобъемлющей цели по сравнению с традиционным сценариями использования. Вместо того чтобы описывать функциональность исключительно с точки зрения пользователя, мы подходим к ней с точки зрения приложения при выполнении события или действия.



☝️Это означает, что UseCase не только описывает действия пользователя, но и представляет шаги, необходимые для достижения определенного результата при инициации события. Объединяя эти подходы, мы создаем выразительные и удобочитаемые UseCase, соответствующие требованиям приложения.



Как создать UseCase в рамках гибкой и функционально чистой архитектуры?

Прежде чем мы углубимся в особенности UseCase в контексте гибкой и функционально чистой архитектуры, разберемся с тем, как реализовать UseCase в рамках чистой архитектуры.



Для лучшего понимания рассмотрим простой пример UseCase в приложении электронной коммерции.



UseCase: Place Order (размещение заказа).

Действие: Клиент.

Описание: Этот UseCase представляет собой процесс размещения клиентом заказа на товар в приложении электронной коммерции.



Требования:

1. Клиент должен быть авторизован.

2. Корзина не должна быть пуста, чтобы можно было оформить заказ.

3. Сумма денег в кошельке клиента не должна быть меньше суммы заказанного товара.

4. Если все три условия соблюдены, необходимо обновить запас продукции.

5. После завершения оформления заказа корзина в приложении должна быть очищена.



Чтобы реализовать это все в рамках чистой архитектуры, вы, как правило, следуете структуре кода, подобной приведенной ниже.

class PlaceOrderUseCase(

private val userRepository: UserRepository,

private val productRepository: ProductRepository

) {

operator fun invoke(order: Order) {

if (userRepository.isLoggedIn()) {

val cart = userRepository.getCart()

if (cart.isNotEmpty()) {

if (userRepository.hasEnoughFunds(order.getTotalPrice())) {

productRepository.updateProductStock(order)

userRepository.clearCart()

} else {

throw InsufficientFundsException(

"Not enough funds in the wallet."

)

}

} else {

throw EmptyCartException("The cart is empty.")

}

} else {

throw NotLoggedInException("User is not logged in.")

}

}

}


Теперь разберем ее шаг за шагом, чтобы создать UseCase:



Читать



@android_its