DDD - это сопоставление словаря вашего клиента с вашим дизайном. Ваш клиент (надеюсь) говорит о том, что пользователи, претендующие на работу, не связывают какой-либо целочисленный идентификатор с другим целочисленным идентификатором. Попробуйте придерживаться реального мира как можно ближе, если только это не станет бременем.
Передавая всю сущность, вы можете сразу извлечь выгоду из поведения сущности, не создавая ее сначала.
Так что придерживайтесь сущностей, если только у вас нет ситуации, когда у часто есть только ID для работы. Обычно это происходит, когда вы имеете дело с внешними системами , такими как веб-службы. В этом случае вы можете создать перегрузку метода, которая принимает идентификатор. Эта перегрузка должна проверять идентификатор, создавать объект и вызывать перегрузку, которая принимает объект.
public void Apply(int jobId, int userId)
{
// Validate the IDs.
// Construct the entities.
var job = ...;
var user = ...;
// Call the 'proper' overload.
Apply(job, user);
}
public void Apply(Job job, User user)
{
// Actual business logic belongs here.
}
Опять же: старайтесь по возможности избегать таких перегрузок, если только вы не имеете дело с внешними системами, которые только возвращают идентификатор.
С точки зрения кодирования, сущности также лучше, чем целые числа. Целое число может иметь любое целочисленное значение, поэтому вам придется проверять его везде, где вы его используете. Ваши фабрики несут ответственность за создание действительных сущностей, и ваша логика (домена) должна поддерживать ваши сущности в действительном состоянии. Таким образом, использование сущности абсолютно безопасно и не требует большой проверки.