Đơn vị Effect trong kiến ​​trúc sạch cho ứng dụng giao diện người dùng

0 0 0

Người đăng: Kansu Leg

Theo Viblo Asia

Bài viết này chia sẻ khái niệm và cách triển khai đơn vị Effect trong các ứng dụng giao diện người dùng trong Kiến trúc sạch.

Đơn vị Effect đóng gói logic tương tác với các tài nguyên bên ngoài thông qua các cổng. Nó quản lý các tác dụng phụ, hoạt động không đồng bộ và điều phối yêu cầu.

Các đơn vị hiệu ứng xử lý các yêu cầu qua cổng chéo, truy xuất dữ liệu, gửi quy trình và chia sẻ logic truy xuất trên nhiều trình tương tác trường hợp sử dụng.

Hiệu ứng thực hiện

Effect triển khai một giao diện do người dùng cung cấp (trình tương tác trường hợp sử dụng). Giao diện này có thể biểu diễn một chức năng theo yêu cầu của trường hợp sử dụng hoặc một chức năng phức tạp hơn, được sử dụng trên toàn ứng dụng.

Việc triển khai hiệu ứng phát triển từ dạng nội tuyến trong người tiêu dùng thành các đơn vị được trích xuất:

 --------------- ------------------
| inline effect | ---> | extracted effect | --------------- ------------------

Ban đầu, các hiệu ứng được triển khai trực tuyến, tập trung vào việc tìm nạp dữ liệu, gửi yêu cầu và sắp xếp các tương tác.

Triển khai hiệu ứng nội tuyến

Hãy xem xét một trình tương tác trường hợp sử dụng khởi tạo kho thực thể khi ứng dụng khởi động, yêu cầu dữ liệu đơn hàng và người dùng:

export const useInitializeApplicationUseCase = (): { execute: () => Promise<void> } => { const usersGateway = useUsersGateway(); const ordersGateway = useOrdersGateway(); const execute = async () => { // inline effect const users = await usersGateway.getUsers(); const orders = await ordersGateway.getOrders(); setUsersAndOrdersTransaction({ users, orders }); }; return { execute };
};

Thực hiện hiệu ứng trích xuất

Việc triển khai nội tuyến có thể được trích xuất thành một đơn vị hiệu ứng có thể tái sử dụng:

// File: getUsersAndOrdersEffect.ts
export const getUsersAndOrdersEffect = async () => { const usersGateway = useUsersGateway(); const ordersGateway = useOrdersGateway(); const users = await usersGateway.getUsers(); const orders = await ordersGateway.getOrders(); return { users, orders };
}; // File: useInitializeApplicationUseCase.ts
export const useInitializeApplicationUseCase = (): { execute: () => Promise<void> } => { const execute = async () => { const { users, orders } = await getUsersAndOrdersEffect(); setUsersAndOrdersTransaction({ users, orders }); }; return { execute };
};

Các hiệu ứng được trích xuất bao gồm toàn bộ logic, cho phép sửa đổi nội bộ như yêu cầu song song mà không ảnh hưởng đến người dùng:

// File: getUsersAndOrdersEffect.ts
export const getUsersAndOrdersEffect = async () => { const usersGateway = useUsersGateway(); const ordersGateway = useOrdersGateway(); // Fetch users and orders in parallel const [users, orders] = await Promise.all([ usersGateway.getUsers(), ordersGateway.getOrders(), ]); return { users, orders };
}; // File: useInitializeApplicationUseCase.ts
export const useInitializeApplicationUseCase = (): { execute: () => Promise<void> } => { const execute = async () => { const { users, orders } = await getUsersAndOrdersEffect(); setUsersAndOrdersTransaction({ users, orders }); }; return { execute };
};

Tên hiệu ứng phải nêu rõ chức năng và kết thúc bằng hậu tố Effect.

Hỏi & Đáp

Một đơn vị Hiệu ứng nên được kiểm tra như thế nào?

Các đơn vị hiệu ứng có thể được thử nghiệm tích hợp với các đơn vị phụ thuộc của chúng hoặc riêng biệt bằng cách sử dụng bản mô phỏng.

Nên đặt Hiệu ứng ở đâu?

Các hiệu ứng nên được đặt trong một thư mục effects chuyên dụng.

Hiệu ứng có thể lồng nhau được không?

Có, Hiệu ứng có thể được lồng nhau. Tuy nhiên, việc lồng nhau có thể làm phức tạp lý luận và thử nghiệm, vì vậy hãy sử dụng cẩn thận.

Có thể sử dụng nhiều Hiệu ứng cùng lúc không?

Có, sử dụng nhiều hiệu ứng cùng lúc là phổ biến và thiết thực.

Phần kết luận

Các đơn vị hiệu ứng quản lý hiệu quả các hoạt động không đồng bộ và phối hợp các tương tác qua cổng. Bắt đầu với các triển khai nội tuyến và chỉ trích xuất các hiệu ứng khi cần, duy trì tính linh hoạt của kiến ​​trúc khi độ phức tạp của ứng dụng tăng lên.

Bình luận

Bài viết tương tự

- vừa được xem lúc

~/.dotfiles in 100 Seconds

What are dotfiles? Take to take your developer productivity to the next level by automating the setup of your computer. Go beyond 100 seconds with special guest Patrick McDonald to setup your own dot

0 0 44

- vừa được xem lúc

Vim in 100 Seconds

Vim is a keyboard-based text editor that can improve your productivity when writing code. Learn more in the Vim for VS Code course https://bit.ly/370N7Pr. .

0 0 65

- vừa được xem lúc

Linux Directories Explained in 100 Seconds

Linux is a cryptic labyrinth of directories defined my Filesystem Hierarchy Standard (FHS). Learn the purpose of the most common Linux directories in 100 seconds https://fireship.io/tags/linux/ . .

0 0 55

- vừa được xem lúc

Invite Only! Use FOMO to grow your app // Exclusive Phone SignIn Tutorial

#FOMO fear of missing out, is the social anxiety you feel when you're not invited to the cool new social media Clubhouse. Turn your fomo into jomo by coding up invite-only phone authentication with Re

0 0 32

- vừa được xem lúc

Why so many distros? The Weird History of Linux

Why are there so many Linux distros? Take a brief journey through the history of Linux to understand hundreds of different distros exist today https://fireship.io/. . 00:00 In the Beginning.

0 0 37

- vừa được xem lúc

SQL Explained in 100 Seconds

Learn the fundamentals of Structured Query Language SQL! Even though it's over 40 years old, the world's most popular databases still run on SQL. . #dev #database #100SecondsOfCode. .

0 0 32