Tôi có một kiến trúc 3-tier trông gần như thế này:ranh giới giao dịch trong một kiến trúc N-tier
Khách hàng -> Kinh doanh -> Dữ liệu
nên giao dịch lý tưởng bắt đầu từ đâu?
Một trường tư tưởng cho rằng giao dịch chỉ nên bắt đầu ở đầu lớp dữ liệu. Lớp nghiệp vụ chỉ thao túng các đối tượng nghiệp vụ với logic nghiệp vụ và không bao giờ biết về các giao dịch. Doanh nghiệp thực hiện tất cả công việc của mình để thao tác các đối tượng và sau đó đưa chúng đến lớp Dữ liệu để được duy trì. Đó là một triết lý hơi yên tĩnh áp dụng cho các lớp thấp hơn.
Một trường phái tư tưởng khác cho rằng giao dịch nên bắt đầu ở đầu lớp Doanh nghiệp. Lớp nghiệp vụ định nghĩa các đơn vị logic của công việc, không phải lớp dữ liệu, bởi vì một đơn vị logic của công việc đôi khi chứa logic nghiệp vụ, không chỉ logic dữ liệu.
Tôi thích ý tưởng đẩy mối quan tâm giao dịch ở mức thấp nhất có thể. Nhưng tôi cũng tìm thấy nó có thể đòi hỏi thêm nỗ lực và những thách thức thiết kế để thử và giữ logic kinh doanh ra khỏi lớp dữ liệu, trừ khi nó chỉ là các hoạt động CRUD. Nếu bạn áp dụng các mẫu thiết kế RESTful với một búa tạ, bạn có thể làm cho nó để các ứng dụng của bạn có rất ít hoạt động phi CRUD.
Thậm chí còn có trường thứ 3 của tư tưởng nói rằng Khách hàng có thể bắt đầu giao dịch để có thể kết hợp nhiều hoạt động kinh doanh khi cần. Nhưng bây giờ khách hàng đang xác định đơn vị công việc? Đó không phải là một mối quan tâm kinh doanh?
Một trường tư tưởng thứ tư nói rằng khách hàng của tôi có thể chỉ là các thành phần SOA có thể tham gia vào một giao dịch XA bắt đầu ngay cả bên ngoài khách hàng !!
nhà phát triển của chúng tôi muốn một số tiêu chuẩn hơn bê tông hơn là chỉ "Bắt đầu giao dịch bất cứ nơi nào bạn cảm thấy như"
Có ai có bất kỳ ý kiến hoặc góp ý về vấn đề này?
Cảm ơn!
FWIW, Java EE bắt đầu giao dịch với Đậu phiên, có hiệu quả là lớp Doanh nghiệp. (Nhưng Java EE thường tạo ra các lựa chọn thiết kế có lợi cho việc tích hợp với chi phí tách) – Beaker