Khái niệm Use Case trong Clean Architecture

Chào anh chị, em đang băn khoăn Use Case trong Clean Architecture và khái niệm Use Case trong Biểu đồ UML là khác nhau hay tương đồng ?

Theo tập kí hiệu của Use Case Diagram thì các use case có liên hệ với nhau thông qua extends, generalization hoặc include, có thể tổng quát hóa cũng như cụ thể hóa. Còn use case trong Clean Architecture chỉ là mô tả một tác vụ cụ thể, không phân tách hay trừu tượng được, không có sự liên hệ với use case khác.

Nếu đưa khái niệm use case của biểu đồ use case diagram vào trong Clean Architecture, thì kiến trúc này sẽ bị phá vỡ và chúng ta cần 1 kiến trúc khác để mapping đúng với khái niệm.

Vì khi này các entity có thể phụ thuộc vào các abstract use case (áp dụng dependency inversion để module cấp cao không phụ thuộc vào module cấp thấp), thế nhưng theo khái niệm abstract use case cũng là use case do tính trừu tượng sẵn có của khái niệm use case là biểu thị sự tương tác chứ không mô tả rõ ràng về sequence hay activity, … như các loại diagram khác. Nghĩa là khi này, tầng domain phụ thuộc vào entities thế nhưng entities cũng ngược lại phụ thuộc vào domain => mâu thuẫn

Kết luận:

Như vậy 2 khái niệm use case này khác nhau, sẽ tốt hơn không nếu tác giả Robert C. Martin sử dụng 1 thuật ngữ khác thay vì use case để tránh hiểu lầm ?

Nếu 2 khái niệm use case này giống nhau, thì kiến trúc Clean Architecture là không tốt vì nó tự mâu thuẫn.

Xin cảm ơn anh chị và mong được góp ý, chỉ lỗi sai

Trân trọng

Cũng hong cần trân trọng đâu :))

Tương đồng.
Còn vì sao bạn thấy nó conflict vì bạn đang cố gộp hai khái niệm vô làm một. Trong khi một khái niệm thì ở mức abstraction rất cao, cái còn lại thì thấp hơn.
Còn muốn thấy giống thì gộp Entity + UC lại thành một rồi so sánh là nó y chang.

Ngoài ra có vẻ bạn đang hiểu ngược về chiều của các dependencies. Phải là UC phụ thuộc Entity chứ Entity nào phụ thuộc UC nhỉ?

Use Case trong UML Diagram bản chất là abstract, không chỉ rõ cơ chế hoạt động.
Nếu 2 khái niệm đó là tương đồng thì em áp dụng Dependency Inversion để cho entities phụ thuộc vào abstract use case thì bản chất là phụ thuộc vào use case rồi.

Tại sao xài DI lại khiến cho entities phụ thuộc vào UC bạn nhỉ? Mình chưa hiểu ý bạn chỗ đó lắm.
Ý bạn là interface là 1 abstract use case?
và bạn đang bối rối bởi abstract use case trong clean và trong UML diagram?

nếu đúng như vậy, thì mình nghĩ bạn nên bỏ ra khỏi đầu chữ Abstract Use Case. thay vào đó bạn nên hiểu Abstract UC khi này là 1 interface. Interface không định nghĩa UC sẽ làm gì, mà nó định nghĩa các hàm 1 UC cần để implement cái UC đó.

1 UC có thể phụ thuộc vào nhiều interfaces khác nhau.

và không có khái bắc cầu là, 1 entity A implement 1 interface IA, UC X phụ thuộc interface IA đó
-> entity A đó phụ thuộc vào UC X

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?