Câu trả lời được chấp nhận không chính xác. Và mặc dù thực tế rằng John sử dụng CRUD như một ví dụ chống mẫu bằng cách sử dụng CRUD cho không phải là xấu cho SOA.Đây là vấn đề với SOA như John mô tả: nó khuyến khích sự phức tạp gia tăng ở cấp độ dịch vụ, điều này cuối cùng dẫn đến sự hỗ trợ ít hơn cho nhiều trường hợp sử dụng. Một trong những lý do chính chúng tôi xây dựng API là cung cấp quyền truy cập vào nhiều ứng dụng, đây là nơi ROI chính đang xây dựng các API.
Ví dụ: giả sử chúng tôi có API blog. Giả sử chúng tôi cung cấp cho người dùng khả năng viết bài đăng, thêm hình ảnh và đưa nhận xét vào tất cả trên một màn hình của ứng dụng bên ngoài của chúng tôi. Trong tầm nhìn của John của SOA ông có lẽ sẽ khuyên chúng ta xây dựng API của chúng tôi sử dụng một cuộc gọi để làm tất cả những điều này vì thế sẽ ít tán gẫu và blah blah blah ... vậy:
{
"post_title": "New Post",
"post_content": "Some Stuff....",
"comments": [{
"comment": "This is right on!",
"userId": 101
}, {
"comment": "I agree.",
"userId": 105
}],
"images": [{
"imgURL": "http://some.img.com/1"
}, {
"imgURL": "http://some.img.com/2"
}]
}
Bây giờ có rất rõ ràng ba đối tượng dữ liệu khác nhau cần được lưu trữ riêng ở đây: bài đăng, nhận xét và hình ảnh. Từ quan điểm của kho dữ liệu, bài đăng chuyển đến bảng POSTS các chú thích tới bảng COMMENTS và các hình ảnh tới bảng IMAGES. Vì vậy, nếu chúng tôi xây dựng dịch vụ của chúng tôi theo các đối tượng thuê SOA như John mô tả chúng, chúng tôi thực hiện cuộc gọi của chúng tôi với đối tượng của chúng tôi và dịch vụ cố gắng tạo bài đăng, ví dụ như mục đích, hoạt động tốt các bình luận hoạt động tốt nhưng khi chúng tôi nhận được các hình ảnh dịch vụ nhận ra rằng một trong các URL hình ảnh bị lỗi là không thành công. Vì vậy, dịch vụ của chúng tôi trả về một thất bại? Mặc dù 3 phần khác hiện đã được lưu trữ thành công trong kho dữ liệu của chúng tôi? Chúng ta có quay trở lại và hoàn tác tất cả các phần thực thi thành công không? Điều gì xảy ra nếu cửa hàng dữ liệu đã thực hiện các thay đổi và chúng tôi không thể khôi phục lại? Một số điều này với thực tế là nếu chúng ta làm cho nó "trò chuyện nhiều hơn" và gửi chúng riêng lẻ, bây giờ chúng ta có thể sử dụng lại các dịch vụ đó trong các ứng dụng khác mà không cần phải viết lại bất kỳ phần nào của dịch vụ.
Phần xấu của dịch vụ tổng hợp là bạn đang được bán trên ý tưởng rằng dịch vụ sẽ không bao giờ thất bại ... điều đó thật lố bịch. Sẽ luôn luôn có một trường hợp cạnh mà một cái gì đó sẽ thất bại và bằng cách hợp nhất tất cả mọi thứ vào một dịch vụ bạn đã tăng sự phức tạp của bạn và thực sự tăng khả năng của bạn thất bại.
Tôi sẽ so sánh phiên bản SOA này với những thiếu sót mà chúng tôi đã nhận ra trong việc xây dựng các Đối tượng của Thiên Chúa trong Lập trình hướng đối tượng. https://en.wikipedia.org/wiki/God_object
Chúng tôi biết rõ hơn điều này, vậy tại sao chúng tôi lại khôi phục? Dịch vụ hợp nhất hoặc Thiên Chúa là một ý tưởng tồi tệ giống như Thiên Chúa. Tôi nói xây dựng các dịch vụ của bạn để làm một việc và làm tốt cho nhiều trường hợp sử dụng nhất có thể và dịch vụ của bạn sẽ tốt.
Tôi đoán tôi sẽ phải đọc bài viết để nhận được câu trả lời: vì khi nào thao tác con trỏ (moveNext) được coi là thao tác CRUD? – mikemanne