2010-02-16 35 views
9

Vì không có kho lưu trữ cho các đối tượng giá trị. Làm cách nào để tải tất cả các đối tượng giá trị?Các đối tượng giá trị được lưu và tải như thế nào?

Giả sử chúng ta đang mô hình hóa một ứng dụng blog và chúng tôi có các lớp học này:

  • Post (Entity)
  • Comment (Giá trị đối tượng)
  • Tag (object Value)
  • PostsRespository (Respository)

Tôi biết rằng khi tôi lưu một bài đăng mới, thẻ của nó được lưu cùng với nó trong cùng một bảng. Nhưng làm cách nào tôi có thể tải tất cả các thẻ của tất cả các bài đăng. Nên PostsRespository có một phương pháp để tải tất cả các thẻ? Tôi thường làm điều đó, nhưng tôi muốn biết ý kiến ​​của người khác

Trả lời

8

Tôi đang tìm kiếm một giải pháp tốt hơn cho câu hỏi này và tôi thấy bài viết này:

http://gojko.net/2009/09/30/ddd-and-relational-databases-the-value-object-dilemma/

bài này giải thích rất rõ tại sao có rất nhiều nhầm lẫn với các đối tượng có giá trị và cơ sở dữ liệu. Ở đây bạn là cụm từ mà thích tôi quá nhiều: "Persistence không phải là một cái cớ để biến tất cả mọi thứ để tổ chức"

Gojko Adzic, cung cấp cho chúng ta ba lựa chọn thay thế để lưu các đối tượng giá trị của chúng tôi .

+0

Cơ sở dữ liệu quan hệ và ORM thường lừa chúng tôi tạo ra các thực thể ngẫu nhiên http://www.jefclaes.be/2013/05/accidental-entities-you-dont-need-that.html – JefClaes

+0

cảm ơn liên kết – yeraycaballero

+0

@yeraycaballero Nếu tôi lưu giá trị đối tượng trong một cột văn bản (tùy chọn 3), làm thế nào tôi nên làm gì để thực hiện cập nhật nguyên tử trên đối tượng giá trị? –

3

Tôi hiện đang làm việc thông qua một ví dụ tương tự. Một khi bạn cần phải duy nhất tham chiếu đến các thẻ, chúng không phải là các đối tượng có giá trị đơn giản dài và có thể tiếp tục phát triển phức tạp. Tôi quyết định biến chúng trở thành thực thể riêng của chúng và tạo một kho lưu trữ riêng để truy xuất chúng. Trong hầu hết các trường hợp, chúng được tải hoặc lưu với bài đăng nhưng khi chúng được yêu cầu một mình kho lưu trữ khác được sử dụng.

Tôi hy vọng điều này sẽ hữu ích.

EDIT: Một phần nhờ bài đăng này, tôi đã quyết định sắp xếp lại ứng dụng của mình một chút. Bạn nói đúng rằng tôi có thể đã tạo thẻ một thực thể sai. Từ đó tôi đã thay đổi ứng dụng của mình để các thẻ chỉ là các chuỗi và kho lưu trữ bài đăng xử lý tất cả các yêu cầu lưu trữ xung quanh các thẻ. Đối với các hoạt động cần bài đăng các thẻ được tải với chúng. Đối với bất kỳ hoạt động nào chỉ yêu cầu thẻ hoặc danh sách các thẻ, kho lưu trữ có các phương thức cho nó.

+0

Cảm ơn câu trả lời. Vì vậy, bạn có một TagsRepository. Bạn cũng có một bảng Thẻ trong cơ sở dữ liệu? – yeraycaballero

+0

Tôi thực sự chưa quyết định về cơ sở dữ liệu. Tôi có lẽ sẽ không có một cơ sở dữ liệu riêng biệt và đang mạnh mẽ xem xét một giải pháp cơ sở dữ liệu đối tượng hoặc tài liệu như mongo hoặc đi văng. – smaclell

0

Đây là cách tôi làm cách tôi có thể giải quyết loại vấn đề này theo cách mà tôi hiện đang thực hành DDD.

Nếu bạn đang chỉnh sửa thứ gì đó yêu cầu thêm thẻ và xóa khỏi thẻ, chẳng hạn như bài đăng thì thẻ có thể là thực thể nhưng có lẽ chúng có thể là đối tượng giá trị và được tải và lưu cùng với bài đăng theo cách này. Cá nhân tôi có khuynh hướng ưu tiên các đối tượng giá trị trừ khi đối tượng cần được sửa đổi nhưng tôi nhận ra rằng có sự khác biệt giữa đối tượng thực thể được mô hình hóa là chỉ đọc "ảnh chụp nhanh" và đối tượng giá trị thực tế thiếu nhận dạng. Phần khó khăn là có lẽ đôi khi những gì bạn thường nghĩ là chìa khóa có thể là một phần của một đối tượng giá trị miễn là nó không được sử dụng làm nhận dạng trong bối cảnh đó và tôi nghĩ các thẻ thuộc loại này.

Nếu bạn đang chỉnh sửa các thẻ thì có thể là một ngữ cảnh bị ràng buộc riêng biệt hoặc ít nhất là một tập hợp riêng trong đó thẻ là chính gốc tổng hợp và được lưu giữ thông qua một kho lưu trữ. Lưu ý rằng lớp thực thể đại diện cho các thẻ trong ngữ cảnh này không phải là cùng một lớp thực thể cho các thẻ được sử dụng trong Tổng hợp bài đăng.

Nếu danh sách của bạn có sẵn thẻ trên màn hình cho mục đích chỉ đọc như để cung cấp danh sách lựa chọn, thì đó có thể là danh sách các đối tượng giá trị. Các đối tượng giá trị này có thể nhưng không phải ở trong Mô hình miền vì chúng chủ yếu là về hỗ trợ giao diện người dùng chứ không phải về miền thực.

Hãy kêu gọi nếu có ai có bất kỳ suy nghĩ nào về lý do tôi thực hiện điều này có thể sai nhưng đây là cách tôi đã làm.

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