2012-03-06 38 views
8

Tôi đã thực hiện một chút công việc với mongoDB trong C# nhưng tất cả mã của tôi vẫn đang được phát triển. Tôi tự hỏi những gì các mẫu hữu ích mà mọi người đã tìm thấy trong việc phát triển các lớp miền của họ theo thời gian khi các thuộc tính mới được tạo ra, thay đổi và loại bỏ. Tôi rõ ràng rằng tôi cần chạy bản cập nhật trên tất cả dữ liệu được lưu trữ của mình hoặc đảm bảo rằng các lớp miền của tôi biết cách xử lý các bản ghi định dạng cũ hơn, nhưng theo thời gian tôi có thể tưởng tượng điều này trở nên hỗn loạn nếu một lớp học biết cách xử lý tất cả các định dạng biểu mẫu có thể có.Có bất kỳ mẫu chung nào để thiết kế các lớp cho cơ sở dữ liệu schemaless trong .NET không?

Tôi có đang suy nghĩ về điều này không? Đây có phải là chủ yếu chỉ là một trường hợp sử dụng lập trình phòng thủ tốt?

+0

Đối tượng hoàn toàn mới, câu hỏi hay .. nhưng có thể thuộc về programmers.stackexchange.com vì nó mang tính khái niệm hơn về bản chất so với "vấn đề" bình thường để giải quyết. – NotMe

Trả lời

2
  1. Việc thêm thuộc tính mới vào đối tượng dữ liệu của bạn không thể dễ dàng hơn. Bạn chỉ cần thêm chúng. Trừ khi bạn lo lắng về các thuộc tính này là rỗng đối tượng tồn tại trong cơ sở dữ liệu, bạn không phải làm bất cứ điều gì khác. Nếu một số người dùng/máy sử dụng phiên bản cũ hơn của ứng dụng của bạn và các lớp học của bạn đã được đánh dấu bằng BsonIgnoreExtraElementsThuộc tính, họ thậm chí có thể không cần phải cập nhật phần mềm của họ .
  2. Xóa các thuộc tính lỗi thời không thể dễ dàng hơn. Bạn chỉ cần xóa chúng trong lớp học của bạn. Nếu các lớp học của bạn được đánh dấu bằng BsonIgnoreExtraElementsAttribute, thì bạn thậm chí không phải xóa chúng trong cơ sở dữ liệu của mình (trong trường hợp, ví dụ: người dùng của bạn có một số phiên bản của ứng dụng).
  3. Đổi tên thuộc tính lớp cũng dễ dàng. Phương thức khởi tạo BsonElementAttribute có một tham số, vì vậy bạn có thể ánh xạ nó tới tên thuộc tính chính xác trong cơ sở dữ liệu.
  4. Thay đổi loại thuộc tính có thể yêu cầu bạn chạy bản cập nhật trên dữ liệu của mình. Nhưng nghiêm túc, tần suất bạn thay đổi loại tài sản từ chuỗi thành int trong sản xuất?

Vì vậy, trong nhiều trường hợp, bạn thậm chí sẽ không cần chạy cập nhật dữ liệu của mình (trừ khi bạn thay đổi loại dữ liệu hoặc thuộc tính ảnh hưởng đến chỉ mục). Một điểm nữa là việc thêm BsonIgnoreExtraElementsAttribute thường là một thực hành tốt, đặc biệt nếu bạn lo lắng về các thuộc tính được thêm vào và/hoặc bị loại bỏ thường xuyên. Theo thực hành này, bạn có thể cung cấp các phiên bản cũ hơn và mới hơn của ứng dụng của bạn để làm việc với tất cả các phiên bản của hồ sơ, tận hưởng những lợi ích của "schemalessness".

+0

Tôi đã suy nghĩ theo cùng một dòng, nhưng đã lo lắng rằng nó không thể được dễ dàng. Vui mừng khi biết rằng nó có vẻ là. –

Các vấn đề liên quan