Я думаю, что вам нужно это uasort
-
Сортировать массив с определенной пользователем функцией сравнения и поддерживать связь индекса
Пример
uasort($stats, 'compare');
Насколько я понимаю DDD, объекты значений - это просто способ разбить ваши сущности. Если объект значения должен быть сохранен с идентификатором в базе данных, это не объект значения.
Пример:
Модель предметной области выглядит так (C #):
public class Customer : Entity
{
public Guid CustomerID { get; }
public string LastName { get; set; }
public Address HomeAddress { get; set; }
}
public class Address : ValueObject
{
public string Street { get; set; }
public string City { get; set; }
public string ZipCode { get; set; }
}
Соответствующая таблица базы данных будет выглядеть примерно так ( Псевдо-SQL):
CREATE TABLE Customers
(
CustomerID,
LastName,
HomeAddress_Street,
HomeAddress_City,
HomeAddress_ZipCode,
)
Чтобы хранить адреса в отдельной таблице, вы должны сделать ее объектом с идентификатором.
Когда Эрик Эванс говорит о том, что «сущности имеют идентичность, а объекты-значения - нет», он не говорит о столбце идентификаторов в базе данных - он говорит об идентичности как концепции .
ВО не имеют концептуальной идентичности. Это не означает, что у них не должно быть постоянства идентичности. Не позволяйте реализации постоянства омрачить ваше понимание сущностей и ВО.
См. Мой пост здесь .
Лично у меня есть поле Id в объекте значения - я рассматриваю его как другой атрибут объекта значения (например, имя, местоположение и т. Д.).
Возможно, это не настоящий DDD, но у меня он работает.