Tôi hy vọng sẽ viết một thuật toán để đồng bộ hóa hai cấu trúc phân cấp. Các cấu trúc này có thể là đồ thị đối tượng, dữ liệu được lưu trữ trong các bảng cơ sở dữ liệu quan hệ, vv (thậm chí là hai cấu trúc khác nhau, miễn là chúng có khóa tương đương). Việc đồng bộ hóa sẽ là một chiều, tức là, một cấu trúc sẽ là nguyên mẫu và một cấu trúc khác sẽ được sửa đổi để khớp.Đồng bộ hóa một chiều của hai cấu trúc phân cấp
Giả sử chúng tôi có chức năng sync
. Nó sẽ cần phải chấp nhận những điều sau đây:
objA
- nguyên mẫuobjB
- đối tượng phải được sửa đổikeyA
- chức năng tạo ra chìa khóa choobjA
keyB
- chức năng tạo ra chìa khóa choobjB
addB
- chức năng tạoobjB
(trả về id củaobjB
mới)setB
- chức năng để cập nhậtobjB
remB
- chức năng để xóa mộtobjB
parB
- id của mẹobjB
's - điều này sẽ được chuyển choaddB
cho bối cảnh
Vì vậy, chúng tôi có này:
let sync (objA:'a) (objB:'b) (keyA:'a -> 'k) (keyB:'b -> 'k)
(addB:'p * 'a -> 'p) (setB:'a * 'b -> unit) (remB:'b -> unit)
(parB:'p) = ...
Bây giờ, đây là nơi tôi đang gặp sự cố. 'a
và 'b
là phân cấp, do đó, chức năng cần phải biết thuộc tính nào của 'a
và 'b
nó sẽ đi qua (khi nó so sánh khóa của chúng và quyết định khớp với nhau đến nay và nên được tiếp tục đi qua). Đối với các thuộc tính "con" này, nó cần tất cả các đối số giống nhau được truyền để đồng bộ hóa, nhưng đối với các kiểu tương ứng của chúng.
Đây là khi nó trở nên rõ ràng đây là một vấn đề cấu trúc dữ liệu. Làm thế nào tôi có thể chuỗi lại với nhau thông tin này sao cho đối tượng gốc có thể được chuyển đến sync
và nó có thể đi qua các đồ thị xuống? Suy nghĩ ban đầu của tôi là kết hợp tất cả các đối số vào một lớp, mà sẽ có một tài sản trẻ em (một số ResizeArray
cùng loại). Nhưng với các thuộc tính khác nhau có các loại khác nhau, tôi không thể tìm ra cách để làm cho nó hoạt động, ngắn ném các loại ra ngoài cửa sổ và làm cho hầu hết hoặc tất cả các đối số kiểu obj
.
Vì vậy, đây là những câu hỏi của tôi:
- Có một phương pháp tốt được thành lập để thực hiện điều này rồi (tôi đã không thể tìm thấy bất cứ điều gì)
- cấu trúc dữ liệu Những gì tôi có thể sử dụng để đóng gói các dữ liệu cần thiết để thực hiện công việc này?
Tôi đã cố gắng hết sức để giải thích kỹ lưỡng, nhưng nếu mọi thứ vẫn chưa rõ ràng, vui lòng hỏi và tôi sẽ cố gắng cung cấp thông tin tốt hơn.
Tôi đoán bạn sẽ cần cấu trúc dữ liệu trung gian mà thuật toán này sẽ hoạt động, cũng cho nhiều loại dữ liệu khác nhau, bạn cần phải chuyển dữ liệu đó sang cấu trúc dữ liệu trung gian, chạy bản ngã và sau đó chuyển nó trở lại dữ liệu gốc form – Ankur