О 1: я не очень хорошо знаком с EF, но использую подход отображения на основе кода / соглашения, я бы предположил, что не так уж и сложно отобразить POCO с помощью геттеров и сеттеров (даже с учетом того, что "DbContext
с классом DbSet
properties "в другом проекте не должно быть так сложно).Я бы не стал считать POCO совокупным корнем.Скорее они представляют «состояние в совокупности, которую вы хотите сохранить».Пример ниже:
// This is what gets persisted
public class TrainStationState {
public Guid Id { get; set; }
public string FullName { get; set; }
public double Latitude { get; set; }
public double Longitude { get; set; }
// ... more state here
}
// This is what you work with
public class TrainStation : IExpose<TrainStationState> {
TrainStationState _state;
public TrainStation(TrainStationState state) {
_state = state;
//You can also copy into member variables
//the state that's required to make this
//object work (think memento pattern).
//Alternatively you could have a parameter-less
//constructor and an explicit method
//to restore/install state.
}
TrainStationState IExpose.GetState() {
return _state;
//Again, nothing stopping you from
//assembling this "state object"
//manually.
}
public void IncludeInRoute(TrainRoute route) {
route.AddStation(_state.Id, _state.Latitude, _state.Longitude);
}
}
Теперь, что касается жизненного цикла агрегата, есть два основных сценария:
- Создание нового агрегата: вы можете использовать фабрику, фабрикуметод, конструктор, конструктор, ... все, что соответствует вашим потребностям.Когда вам нужно сохранить агрегат, запросите его состояние и сохраните его (обычно этот код не находится в вашем домене и является достаточно общим).
- Получение существующего агрегата: вы можете использовать репозиторий,Дао, ... все, что соответствует вашим потребностям.Важно понимать, что то, что вы извлекаете из постоянного хранилища, - это состояние POCO, которое вам нужно вставить в первоначальный агрегат (или использовать его для заполнения своих частных членов).Все это происходит за фасадом хранилища / DAO.Не путайте ваши колл-сайты с таким общим поведением.
On 2: На ум приходит несколько вещей.Вот список:
- Совокупные корни являются границами согласованности.Какие требования в отношении согласованности вы видите между Организацией и Сотрудником?
- Организация МОЖЕТ действовать как фабрика Сотрудника, не изменяя состояния Организации.
- «Собственность» - это не то, что представляют собой агрегаты.
- Агрегатные корни обычно имеют методы, которые создают сущности внутри агрегата.Это имеет смысл, поскольку корни отвечают за обеспечение согласованности в совокупности.
Вкл. 3: Назначать идентификаторы извне, преодолевать их, двигаться дальше.Это, однако, не подразумевает их разоблачения (только в штате POCO).