Я очень рад, что недавно нашел этот сайт, я многому научился здесь.
Я из Китая, и мой английский не очень хорош.Но я попытаюсь выразить то, что я хочу сказать.
Недавно я начал изучать доменно-управляемый дизайн, и мне это очень интересно.И я планирую разработать веб-сайт форума с использованием DDD.
Прочитав множество тем, я понял, что постоянное невежество является хорошей практикой.
В настоящее время у меня есть два вопроса о том, что ядолго думаю.
- Должен ли объект домена взаимодействовать с хранилищем для получения / сохранения данных?
- Если объект домена не использует хранилище, то какУровень инфраструктуры (например, единица работы) знает, какой объект домена новый / изменен / удален?
По второму вопросу.Вот пример кода: Предположим, у меня есть класс пользователя:
public class User
{
public Guid Id { get; set; }
public string UserName { get; set; }
public string NickName { get; set; }
/// <summary>
/// A Roles collection which represents the current user's owned roles.
/// But here i don't want to use the public property to expose it.
/// Instead, i use the below methods to implement.
/// </summary>
//public IList<Role> Roles { get; set; }
private List<Role> roles = new List<Role>();
public IList<Role> GetRoles()
{
return roles;
}
public void AddRole(Role role)
{
roles.Add(role);
}
public void RemoveRole(Role role)
{
roles.Remove(role);
}
}
Исходя из приведенного выше класса User, предположим, что я получил пользователя из IUserRepository и добавил для него роль.
IUserRepository userRepository;
User user = userRepository.Get(Guid.NewGuid());
user.AddRole(new Role() { Name = "Administrator" });
В этом случае я не знаю, как репозиторий или единица работы могут узнать, что у пользователя есть новая роль?
Я думаю, что ORM-структура реального невежества должна поддерживать POCO, и любойизменения происходят в самом POCO, структура постоянства должна знать автоматически.Даже если изменить состояние объекта с помощью метода (AddRole, RemoveRole), как в примере выше.
Я знаю, что многие ORM могут автоматически сохранять изменения, если я использую свойство Roles , но иногда мне не нравится этот способ из-за соображений производительности.
Может ли кто-нибудь дать мне несколько идей для этого?Спасибо.
Это мой первый вопрос на этом сайте.Я надеюсь, что мой английский можно понять.
Любые ответы будут очень благодарны.