Это типичная эквивалентность проблема и похоже, что принятый ответ не является хорошим.Я попытаюсь объяснить, почему.
Представьте себе следующее - вы должны написать интеграционный тест на своем бэкэнде, чтобы убедиться, что он правильно сохраняет ваш объект домена.У вас есть код:
[TestMethod]
[Description(@"Sequentially perform operations
1. Save new item in DB
2. Get same Item from DB
Ensure that saved and get Items are equivalent")]
public void Repository_Create_Test()
{
var initialItem = GetTestItem();
//create item and check it is created correct
initialItem.ID = repository.Create(initialItem, userID, ownerID);
Item resultItem = repository.GetById(initialItem.ID, ownerID);
resultItem.Should().NotBeNull();
Assert.AreEqual(initialItem, resultItem);
}
Итак, вам нужно убедиться, что считанный из хранилища объект является абсолютным эквивалентом объекта, который мы отправили в хранилище.Переопределение Equals
здесь легко догадаться.Для этого случая нам нужно настроить Equals
, чтобы сравнить все поля объектов.Но с точки зрения DDD это просто неправильно.Доменные сущности различаются по неизменяемому ключу (или первичному ключу), а не по всем изменяемым полям.Итак, если мы моделируем HR-домен, и у гипотетического «Мистера Икс» появился новый номер телефона, он все равно остается тем же «Мистером Икс».
Все это говорит о том, что в настоящее время я использую FluentAssertions Framework, который обладает довольно мощным средством проверки эквивалентности.Как это:
resultItem.ShouldBeEquivalentTo(initialItem);