2012-02-20 37 views
6

Tôi đang cố gắng mô hình hóa một số đối tượng trong miền của chúng tôi và gặp một vấn đề mà một số đối tượng này có thể được phiên bản. tức là người dùng có thể tạo phiên bản đối tượng mới trong một khoảng thời gian. Vì vậy, tôi cần phải mô hình hóa chúng trong chương trình. Tôi nghĩ rằng đây là một vấn đề phổ biến trong thiết kế SW.Mẫu phiên bản đối tượng

Ban đầu tôi đã nhảy vào ý tưởng bắt chước các khái niệm phiên bản kiểm soát nguồn và đưa ra khái niệm đối tượng được phiên bản và các phương pháp như đăng ký, trả phòng, v.v. Nhưng tôi cảm thấy nó không hoàn toàn 'có hệ thống' vì tôi không khám phá mô hình (ví dụ, tôi cảm thấy như tội phạm như

  • tôi đã không bao gồm các khía cạnh như tìm kiếm nhiều hơn một giải pháp
  • nhìn vào văn học mà sẽ cung cấp cho tôi tài liệu tham khảo vững chắc hơn vv) .

Vì vậy, vấn đề hiện tại của tôi là đối với một mô hình có hệ thống, tôi cần tìm kiếm các mẫu giải quyết vấn đề về mô hình hóa phiên bản, tốt nhất là trong văn học. Và tận dụng tốt nhất của nó, tất nhiên.

Vì vậy, tôi googled cho các mẫu như vậy và chỉ tìm thấy một Temporal Object pattern. Nhưng, tôi không chắc đây có phải là điều tôi muốn hay không. Các bạn có gợi ý nào về các mẫu như vậy không?

[Tự sửa] Có thể tôi chưa mô tả sự cố tốt. Bạn có thể thấy vấn đề tương tự như một vấn đề phiên bản tập tin kiểm soát nguồn. Tôi có một số loại đối tượng (được lưu trữ trong cơ sở dữ liệu) có thể có nhiều phiên bản. Bên trong ứng dụng của tôi, tôi phải xử lý tất cả các phiên bản này và tôi cũng sẽ phải tạo phiên bản mới của các đối tượng (mà cuối cùng sẽ được lưu trữ trong cơ sở dữ liệu). Những gì tôi đang mong đợi là một số loại mô hình có thể trích dẫn mà tôi có thể mô hình hóa các giao diện để truy cập/sửa đổi/thêm các phiên bản mới cho các đối tượng này. Giao diện cơ bản mà tôi có thể đưa ra là IVersionedObject với các phương thức như checkout, Checkin, undoCheckout… Nhưng, đây là ý tưởng của riêng tôi khi quan sát hệ thống kiểm soát nguồn. Tôi không điều đó là một mẫu thiết kế SW như vậy. Vì vậy, mong chờ một số mẫu thiết kế được viết tài liệu rất tốt cho vấn đề trên.

+2

việc kiểm tra này http://stackoverflow.com/questions/557570/what-versioning-design-pattern-would-you- đề nghị nó có thể cung cấp cho bạn một ý tưởng –

+1

Bạn có thể kiểm tra [post] này (http://miroprocessordev.blogspot.com/2011/11/design-patterns-series-1-introduction.html) cho các mẫu thiết kế khác nhau –

+0

thanls Amir Ismail cho liên kết stackoverflow. Điều này có một số liên kết hữu ích, nhưng không đủ cho một giải pháp :-( – PermanentGuest

Trả lời

1

Chẳng phải thứ gì đó giống như một công cụ DataMapper tùy chỉnh?

doc = DocCatalog.get(docid, version); 

Giả sử bạn có thể xem xét từng vật thể vật thể đại diện, tại một thời điểm cụ thể (theo thời gian). Thay vì là một đối tượng có thuộc tính "phiên bản", "phiên bản" được thực hiện bởi cơ sở dữ liệu/danh mục/cơ sở dữ liệu; tức là, đối tượng không biết về các phiên bản, nhưng hệ thống lưu trữ đối tượng thì có.

tiết kiệm/lưu trữ một đối tượng trong DataMapper sẽ tạo ra một phiên bản mới:

// saves doc again after changing the title (which indeed stores a new version of it) 
doc.setTitle (newTitle); 
DocCatalog.save(doc); 

// gets a number indicating how many versions of the document exist 
i_versions = DocCatalog.getVersions(docid); 

// returns second-last version of the document 
doc = DocCatalog.get(docid, i_versions-1); 
Các vấn đề liên quan