
Você tem business logic espalhada em React components. Amanhã quer migrar para Vue. Precisa reescrever tudo.
Clean Architecture separa domain logic do framework.
// ❌ Business logic acoplada ao React
function CheckoutPage() {
const [cart, setCart] = useState([]);
const [total, setTotal] = useState(0);
const addItem = (item) => {
setCart([...cart, item]);
setTotal(total + item.price + (item.price * 0.1)); // Tax logic em component!
};
// ... 200 linhas de business logic
}
UI Layer (React)
↓
Application Layer (Use Cases)
↓
Domain Layer (Entities, Business Rules)
↓
Infrastructure (API, Storage)
// domain/Cart.ts (sem React!)
export class CartItem {
constructor(
public id: string,
public name: string,
public price: number
) {}
}
export class Cart {
private items: CartItem[] = [];
addItem(item: CartItem) {
this.items.push(item);
}
getTotal(): number {
const subtotal = this.items.reduce((sum, item) => sum + item.price, 0);
return subtotal + (subtotal * 0.1); // Business logic aqui, não no React!
}
getItems(): CartItem[] {
return [...this.items];
}
}
// application/AddItemToCart.ts
export class AddItemToCartUseCase {
constructor(
private cartRepo: CartRepository,
private productRepo: ProductRepository
) {}
async execute(productId: string): Promise<void> {
const product = await this.productRepo.findById(productId);
const cart = await this.cartRepo.get();
cart.addItem(new CartItem(product.id, product.name, product.price));
await this.cartRepo.save(cart);
}
}
// ui/CheckoutPage.tsx
function CheckoutPage() {
const { cart, addItem } = useCart(); // Custom hook encapsula use case
return (
<div>
{cart.getItems().map(item => (
<div key={item.id}>{item.name} - ${item.price}</div>
))}
<div>Total: ${cart.getTotal()}</div>
</div>
);
}
// hooks/useCart.ts
function useCart() {
const [cart, setCart] = useState(new Cart());
const addItem = async (productId: string) => {
const useCase = new AddItemToCartUseCase(cartRepo, productRepo);
await useCase.execute(productId);
const updatedCart = await cartRepo.get();
setCart(updatedCart);
};
return { cart, addItem };
}
Clean Architecture desacopla UI de business logic. React vira detail facilmente substituível.
Se você tem cálculos de negócio dentro de useState, você precisa de Clean Architecture.
Productos gratuitos y de pago para convertir ideas en una base que puedas lanzar.
13 productos disponiblesContinúa explorando temas similares

Descubra quais são os frameworks de UI mais usados em 2025 — incluindo Tailwind CSS, Shadcn/UI, Material UI e outros — e entenda por que o CSS estático está substituindo o styled-components na era moderna do React.

Nos últimos meses, prototipando apps de IA, percebi o frontend como gargalo: backends mágicos, mas UIs amadoras. Compartilho minha lib open source React Cupertino UI, com animações nativas e componentes para voz/imagens, para ajudar devs a criarem experiências premium. Aprenda os trade-offs e teste o código!
A TUI do lemon-code é React: Box, Text e hooks, renderizados em ANSI pelo Ink. Funciona muito bem, desde que você conheça os dois pontos em que o Ink quebra sob Bun no Mac.
Una lista de 47 puntos para encontrar errores, riesgos de seguridad y problemas de rendimiento antes del lanzamiento.
Templates probados en producción, usados por desarrolladores. Ahorra semanas de setup en tu próximo proyecto.