Hãy giả vờ rằng chúng tôi có một dịch vụ gọi là quy trình kinh doanh. Quá trình này sẽ gọi lớp dữ liệu để tạo một đối tượng loại A trong cơ sở dữ liệu.
Sau đó, chúng ta cần gọi lại trên một lớp khác của lớp dữ liệu để tạo một thể hiện của loại B trong cơ sở dữ liệu. Chúng ta cần truyền một số thông tin về A cho khóa ngoại.
Trong phương thức đầu tiên, chúng ta tạo một đối tượng (sửa đổi trạng thái) và trả về ID (truy vấn) trong một phương thức duy nhất.
Trong phương thức thứ hai, chúng ta có hai phương thức, một (createA) cho lưu và phương thức kia (getId) cho truy vấn.
public void FirstMethod(Info info)
{
var id = firstRepository.createA(info);
secondRepository.createB(id);
}
public void SecondMethod(Info info)
{
firstRepository.createA(info);
var key = firstRepository.getID(info);
secondRepository.createB(key);
}
Theo hiểu biết của tôi, phương pháp thứ hai theo sau phân tách truy vấn lệnh đầy đủ hơn. Nhưng tôi thấy thật lãng phí và phản trực giác khi truy vấn cơ sở dữ liệu để lấy đối tượng chúng ta vừa tạo.
Làm thế nào để bạn dung hòa CQS với một kịch bản như vậy?
Có phải chỉ có phương pháp thứ hai tuân theo CQS và nếu vậy thì có nên sử dụng nó trong trường hợp này không?