EF Core - как отобразить пользовательский тип, который является частным - PullRequest
0 голосов
/ 17 декабря 2018

Я хочу инкапсулировать внутренние компоненты моего агрегата, но сейчас я могу просто позвонить Person.Address.Update() и иметь возможность напрямую изменять эту сущность.

Я хотел бы сделать Person.Address вместо этого приватное поле, недоступное извне совокупного корневого класса.Может кто-нибудь объяснить, как сделать свободное сопоставление API для Entity Framework Core.Адрес идет в своей таблице (отношения один на один с человеком).Я не могу заставить его работать и не хочу зацикливаться на текущем дизайне.

    public class Person : Entity, IAggregateRoot
{
    public string FirstName { get; private set; }
    public string LastName { get; private set; }
    public Address Address { get; private set; }

    private Person() { }

    public Person(string firstName, string lastName, Address address)
    {
        FirstName = firstName;
        LastName = lastName;
        Address = address;
    }

    public void UpdateAddress(string streetName)
    {
        Address.Update(streetName);
    }
}

public class Address : Entity
{
    public string StreetName { get; private set; }

    private Address() { }

    public Address(string streetName)
    {
        StreetName = streetName;
    }

    public void Update(string streetName)
    {
        StreetName = streetName;
    }
}

1 Ответ

0 голосов
/ 17 декабря 2018

На мой взгляд, способ, которым вы реализовали модификацию адреса через UpdateAddress, является правильным.У вас есть агрегат, в котором есть множество открытых бизнес-методов, с помощью которых вы можете изменить все состояние агрегата и окруженных объектов.Возможно, вы могли бы найти лучшее имя метода, чем UpdateAddress, потому что «обновление» кажется техническими деталями, может быть: AssignAddres, LocateAtAddress, AttachAddress.Также из метода UpdateAddress должно быть передано бизнес-событие, например: PersonaLocatedAtAddressEvent, когда изменяется состояние агрегата (+ внутренняя сущность).

...