Абстрактный базовый класс для Всех Доменных Объектов Объекта

Ваше решение, кажется, O (n ^ 2), но должно быть решаемо в O (n):

function processCandyArray(candies) {
    let sum = 0, steps = 0, carry = 0
    for (let i = 0; i < candies.length; i++)
        sum += candies[i]
    let avg = sum / candies.length
    for (let i = 0; i < candies.length - 1; i++) {
        carry = candies[i] + carry - avg
        steps += carry > 0 ? carry : -carry
    }
    return steps
}

Вы можете просто пройти через массив после вычисления среднего и в каждой позиции, которую вы рассчитываете сколько конфет переносится (слева - положительно, а справа - отрицательно) и суммирует абсолютные переносы.

5
задан 15 March 2009 в 14:16
поделиться

4 ответа

Использование термина равенство перегружается здесь:

1) Равенство для идентификационных данных

Если у Вас есть 2 экземпляра того же Клиента, у них должно оба быть то же значение GUID – это - единственный способ гарантировать, что Вы работаете с тем же Объектом. В действительности всегда будут различные экземпляры того же Объекта (например, многопользовательские приложения, работающие на различных машинах).

2) Равенство для сходства

Это - то, где Вы проверяете, что 2 экземпляра имеют весь одинаковый значения. Например, если 2 сотрудника посмотрят на того же Клиента, и первый человек изменяет и сохраняет его, то оба человека будут видеть различные данные. Они оба заинтересованы тем же Клиентом, но данные становятся устаревшими.

Для (2), Вам определенно нужен механизм, чтобы сделать проверку. Вы могли сравнить каждое (дорогое) свойство, или Вы могли использовать свойство 'версии' для обнаружения изменений (см. оптимистический механизм блокировки NHIBERNATE).

Я думаю, что Ваш пример немного изобретен и мог бы отвлекать Вас далеко от более важных аспектов DDD. Если Вам интересно, я продаю инструмент, который может помочь схватить легче понятия DDD.

3
ответ дан 14 December 2019 в 19:26
поделиться

Если Вы следуете за DDD, я полагаю, что необходимо проверить равенство объектов их идентификатором (Идентификационные данные). Это вызвано тем, что доменные объекты основные определенный и отслеженный его идентификационными данными а не атрибутами. Так, неважно, насколько подобный они с другими объектами, они - все еще diffirent объекты.

Другое понятие, которое Вы хотели бы проверить, является объектом значения. Это - что-то, что описывает charasteristics объекта и не требует идентификационных данных. Пример был бы, обратился бы, деньги, цвет.

1
ответ дан 14 December 2019 в 19:26
поделиться

Вы указали на две из причин того, почему это используется.

Для Равняется Вам, может не хотеть всегда проверять, равна ли фактическая ссылка, потому что это не может быть. Можно хотеть использовать своего рода свойство идентификации (как общедоступный международный идентификатор) для проверки по видеть, равны ли 2 объекта. Базовое внедрение Равняется, просто собирается проверить, равны ли эти 2 ссылки.

До хэш-кода это - способ однозначно определить данный объект/тип при использовании его в хеш-алгоритмах и т.д.

0
ответ дан 14 December 2019 в 19:26
поделиться

Я имел бы, равняется, только проверяют идентификационные данные, потому что они позволяют Вам иметь экземпляр объекта, содержащего прежде и после ситуации, которая может время от времени быть очень удобной. Чтобы проверить, изменился ли экземпляр, флаг Dirty может добиться цели.

HTH, Jonathan

0
ответ дан 14 December 2019 в 19:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: