Я новичок в .NET Core, так что извините, если этот вопрос не очень подходит для Stackoverdlow. Я использую CosmosDB с .NET Core 2.1. У меня есть простой класс, я сохраняю коллекцию ниже.
public class Customer
{
public string Id { get; private set; }
public string FirstName { get; private set; }
public string LastName { get; private set; }
public Customer(string firstName, string lastName) {
if (string.IsNullOrWhiteSpace(firstName) || string.IsNullOrWhiteSpace(lastName))
{
throw new ArgumentException("First and Last name are required");
}
this.FirstName = firstName;
this.LastName = lastName;
}
}
Обратите внимание на приватный набор, потому что Id автоматически генерируется базой данных и никогда не должен устанавливаться вызывающим.
Когда я сохраняю записи и извлекаю их, свойство Id не заполняется. Однако, если я изменю сеттер на общедоступный, он будет работать нормально Это действительно простой пример, но в идеале я должен быть в состоянии сделать Id setter приватным, так как он должен быть неизменным вне класса. В прошлом я использовал такие библиотеки, как Hibernate в Java, где это работало нормально, потому что поле было установлено с помощью отражения.
Есть ли способ .NET Core и CosmosDB обрабатывать приватный сеттер? Я могу видеть, где это может привести к проблеме в домене, таком как Order, при попытке реализовать подход OOP / DDD.
public class Order
{
public int Id { get; private set; }
public IList<LineItem> LineItems { get; private set; }
public void AddLineItem(LineItem lineItem) {
// do some business logic, encapsulatng the line items
// IE don't just let the caller have free reign
}
}
public class LineItem
{
public string SKU { get; set; }
public int Qty { get; set; }
public decimal PricePerUnit { get; set; }
}