Вы говорите, что «Служба Windows запущена с использованием учетных данных администратора»
Вы имеете в виду фактическую учетную запись «Администратор» или пользователь в группе «Администраторы»? Запуск службы как администратора решил для меня.
В контексте шаблона репозитория агрегированные корни - это единственные объекты, которые ваш клиентский код загружает из репозитория.
Хранилище инкапсулирует доступ к дочерним объектам - с точки зрения вызывающего абонента, он автоматически загружает их либо одновременно с загрузкой корня, либо когда они действительно нужны (как при ленивой загрузке).
Например, у вас может быть объект Order
, который инкапсулирует операции над множеством объектов LineItem
. Ваш клиентский код никогда бы не загрузил объекты LineItem
напрямую, только Order
, который содержит их, что было бы совокупным корнем для этой части вашего домена.
From Evans DDD:
AGGREGATE - это кластер ассоциированных объектов, который мы рассматриваем как единое целое для целей изменения данных. Каждый AGGREGATE имеет корень и границу. Граница определяет, что находится внутри AGGREGATE. Корень - это единичная, специфическая ENTITY, содержащаяся в AGGREGATE.
И:
Корень - это единственный член AGGREGATE, в котором внешним объектам разрешены ссылки на[...]
Это означает, что совокупные корни - это единственные объекты, которые могут быть загружены из хранилища.
Примером является модель, содержащая сущность Customer
и сущность Address
. Мы бы никогда не получили доступ к сущности Address
непосредственно из модели, так как это не имеет смысла без контекста связанного с ней Customer
. Таким образом, мы можем сказать, что клиент
и адрес
вместе образуют совокупность и что клиент
является совокупным корнем.
Представьте, что у вас есть объект "Вычислитель", этот объект также не может существовать без объекта "Программное обеспечение" и объекта "Оборудование". Они образуют Компьютер
совокупность, мини-экосистему для Компьютерной части домена.
Aggregate Root - это материнская сущность внутри совокупности (в нашем случае Компьютер
), общепринятой практикой является то, что ваш репозиторий работает только с сущностями, которые являются Aggregate Roots, и эта сущность отвечает за инициализацию других сущностей.
Рассмотрим Aggregate Root как точку входа в Aggregate.
В коде C#:
public class Computer : IEntity, IAggregateRoot
{
public Hardware Hardware { get; set; }
public Software Software { get; set; }
}
public class Hardware : IEntity { }
public class Software : IValueObject { }
public class Repository<T> : IRepository<T> where T : IAggregateRoot {}
Имейте в виду, что аппаратное обеспечение, скорее всего, тоже будет ValueObject (не имеют собственной идентичности), рассмотрим его только в качестве примера.
.Из разорванного звена :
Внутри агрегата находится Корень агрегата. Корень Агрегата - это родительская сущность для всех других Сущностей и Объектов Агрегата.
Репозитарий работает с Корнем Агрегата.
Больше информации также можно найти здесь.
.