Tôi có một tình huống (tôi đoán là khá chuẩn), nơi tôi cần thực hiện một số phép tính kinh doanh và tạo một loạt các bản ghi trong cơ sở dữ liệu. Nếu có bất cứ điều gì xảy ra bất cứ lúc nào tôi cần phải cuộn mọi thứ trở lại từ cơ sở dữ liệu. Tôi cần một số loại giao dịch. Câu hỏi của tôi là nơi nào tôi thực hiện hỗ trợ giao dịch. Dưới đây là ví dụ của tôiSử dụng các giao dịch với quy trình nghiệp vụ và mẫu Kho lưu trữ
//BillingServices - This is my billing service layer. called from the UI
public Result GenerateBill(BillData obj)
{
//Validate BillData
//Create a receivable line item in the receivables ledger
BillingRepository.Save(receivableItem);
//Update account record to reflect new billing information
BillingRepository.Save(accountRecord);
//...do a some other stuff
BillingRepository.Save(moreStuffInTheDatabase);
}
Nếu có bất kỳ cập nhật nào cho cơ sở dữ liệu không, tôi cần phải cuộn các bản cập nhật khác lại và thoát ra. Tôi chỉ tiếp xúc với một đối tượng Connection qua Repository của tôi trong đó tôi có thể gọi
Connection.BeginTransaction()
hay tôi làm tôi chỉ xác nhận trong lớp dịch vụ và chỉ cần gọi một phương pháp trong kho đó lưu tất cả các đối tượng và xử lý giao dịch? Điều này dường như không đúng với tôi. Nó có vẻ như nó sẽ buộc tôi phải đưa vào logic kinh doanh nhiều trong lớp dữ liệu.
Cách tiếp cận phù hợp là gì? Điều gì sẽ xảy ra nếu tôi cần mở rộng kho (hoặc đó có phải là thiết kế xấu) không?
+1, câu hỏi hay. –
Hy vọng tôi sẽ nhận được câu trả lời tốt =). Trên thực tế bất kỳ câu trả lời tại thời điểm này sẽ là tốt đẹp – Micah