Giả sử chúng tôi có một thực thể gốc tổng hợp của loại Đơn đặt hàng liên quan đến khách hàng và các dòng đơn đặt hàng. Khi tôi nghĩ về một thực thể đơn hàng, nó tự nhiên hơn khi khái niệm hóa nó như không được định nghĩa mà không có một Id. Đơn đặt hàng không có Id có vẻ được biểu thị tốt hơn dưới dạng yêu cầu đặt hàng so với đơn đặt hàng.Làm cách nào để bổ sung gốc tổng hợp vào kho lưu trữ?
Để thêm để một kho lưu trữ, tôi thường thấy người nhanh chóng trật tự mà không có Id và sau đó có kho hoàn thành các đối tượng:
class OrderRepository
{
void Add(Order order)
{
// Insert order into db and populate Id of new order
}
}
Những gì tôi thích về phương pháp này là bạn đang thêm một Ví dụ đặt hàng cho một OrderRepository. Điều đó làm cho rất nhiều ý nghĩa. Tuy nhiên, cá thể đơn đặt hàng không có một Id, và ở phạm vi của người tiêu dùng của kho lưu trữ, nó vẫn không có ý nghĩa với tôi rằng một đơn đặt hàng không có một Id. Tôi có thể định nghĩa một OrderRequest là một thể hiện của trật tự và thêm nó vào kho lưu trữ, nhưng điều đó cảm thấy giống như phát sinh một quả táo từ một quả cam và sau đó thêm nó vào một danh sách cam.
Ngoài ra, tôi cũng đã thấy phương pháp này:
class OrderRepository
{
Order AddOrder(Customer customer)
// It might be better to call this CreateOrder
{
// Insert record into db and return a new instance of Order
}
}
Những gì tôi thích về phương pháp này là một trật tự là undefined mà không có một Id. Kho lưu trữ có thể tạo bản ghi cơ sở dữ liệu và thu thập tất cả các trường bắt buộc trước khi tạo và trả về một thể hiện của một đơn đặt hàng. Những gì mùi ở đây là một thực tế là bạn không bao giờ thực sự thêm một thể hiện của một đơn đặt hàng vào kho lưu trữ.
Dù bằng cách nào hoạt động, vì vậy câu hỏi của tôi là: Tôi có phải sống với một trong hai cách giải thích này hay không hay nhất để mô hình hóa việc chèn?
Tôi tìm thấy câu trả lời tương tự, nhưng đối với các đối tượng giá trị: how should i add an object into a collection maintained by aggregate root. Khi nói đến một đối tượng giá trị không có sự nhầm lẫn, nhưng câu hỏi của tôi liên quan đến một thực thể có mã nhận dạng được lấy từ một nguồn bên ngoài (Id cơ sở dữ liệu được tạo tự động).
Tôi cho rằng một Đơn đặt hàng không có Id không phải là một thực thể Đơn hàng, đây là nơi mà ý tưởng ban đầu đầu tiên của bạn xuất phát từ đó. Để chống lại điều này, bạn phải nhớ trạng thái của các đối tượng của bạn. Nhìn vào 'trạng thái' như là một tạm dừng trong thời gian. Tức là, một yêu cầu trang web. Trong quá trình tạo một đơn đặt hàng, có nó không có một Id lúc đầu nhưng bạn chưa hoàn thành trạng thái của nó - bạn Add() nó trong kho, do đó hoàn thành trạng thái tồn tại của Order(), mà bây giờ là hoàn thành. – eduncan911
Tôi không đồng ý với bạn, tuy nhiên nếu bạn tuyên bố rằng một đơn hàng không có và Id là một thực thể cho một tạm dừng ngắn trong thời gian đó, trong thời gian tạm dừng nó sẽ không có danh tính rõ ràng. Tôi nghĩ, ít nhất là ngữ nghĩa, rằng đây là mâu thuẫn với định nghĩa của một thực thể. –
Bản sắc không bị cắt và khô như bạn nghĩ. Theo đức tin của tôi, danh tính của chúng tôi là những linh hồn độc đáo của chúng tôi có mặt từ quan niệm của chúng tôi. Nhưng đối với chính phủ, danh tính của chúng tôi có thể được thiết lập thông qua nhiều phương tiện: giấy khai sinh, hộ chiếu, v.v. Có một thời điểm mà đứa trẻ không có danh tính chính thức cho chính phủ nhưng chính phủ vẫn coi đó là một thực thể, mặc dù một người cần phải xác định. Hãy suy nghĩ về một mệnh lệnh như một đứa bé quý giá và kho chứa như chính phủ (ints có nhiều người dùng thân thiện hơn!) :) – tuespetre