Масштабирование богатой модели предметной области

Ваш список_ пуст, что является причиной этой ошибки. Вы должны посмотреть на CSV в allFiles. Вы перемещаете csv или переименовываетесь в каталог?

11
задан Wouter Lievens 18 December 2008 в 16:34
поделиться

3 ответа

Существует по крайней мере два способа посмотреть на эту проблему, каждый - техническое, "что я могу сделать для загрузки моих данных более умная" версия. Единственной действительно умной вещью, о которой я знаю, являются динамические наборы, которые частично загружаются остальными, загрузился по запросу, возможной предварительной нагрузкой частей. Был интересный разговор в JavaZone 2008 об этом

Второй подход был большим количеством моего фокуса во время, я работал с DDD; как я могу сделать свою модель так, чтобы это было более "загружаемо", не жертвуя слишком большим совершенства DDD. Моя гипотеза за эти годы всегда была то, что много модели моделей DDD доменные понятия, которые являются на самом деле суммой всех допустимых доменных состояний через все бизнес-процессы и различные состояния, которые происходят в каждом бизнес-процессе со временем. Это - моя вера, что много этих проблем загрузки очень уменьшается, если модели предметной области нормализованы немного больше в терминах с процессами/состояниями. Это обычно означает, что нет никакого объекта "Порядка", потому что ordrer обычно существует в нескольких отличных состояниях, которые имеют довольно другую присоединенную семантику (ShoppingCartOrder, ShippedOrder, InvoicedOrder, HistoricalOrder). При попытке инкапсулировать, это - единственный объект Порядка, Вы неизменно заканчиваете с большим количеством проблем загрузки/конструкции.

Но здесь нет никакой серебряной пули..

5
ответ дан 3 December 2019 в 11:21
поделиться

Нет, не действительно. Не то, чтобы я знаю так или иначе (хотя мне интересно слышать любой из ответов сторонников DDD об обратном).

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

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

0
ответ дан 3 December 2019 в 11:21
поделиться

По моему опыту, это - единственный способ сделать вещи. Если Вы пишете систему, которая пытается полностью скрыться или абстрагировать слой персистентности затем нет никакого способа, которым можно оптимизировать вещи с помощью специфических особенностей слоя персистентности.

Я сталкивался с этой проблемой недавно и работал над решением, где слои персистентности могут принять решение реализовать интерфейсы, которые представляют оптимизации. Я просто играл с ним, но использовать Ваш пример ListAUsers это идет как это...

Сначала запишите метод ListAllUsers, который делает все на доменном уровне. Некоторое время это будет работать, Затем это начнется, становятся слишком медленными.

Когда использование богатой модели предметной области становится медленным, создают интерфейс под названием "IListActiveUsers" (или вероятно что-то лучше). И имейте свою реализацию кода персистентности, этот Интерфейс с помощью whetever методы является соответствующим (вероятно, оптимизировал SQL).

Теперь можно записать слой, который проверяет эти интерфейсы и называет определенный метод, если он существует.

Это не прекрасно, и у меня нет большого опыта с этим видом вещи. Но мне кажется, что ключ должен гарантировать, чтобы при использовании полностью наивного метода персистентности затем, весь код все еще работал. Любая оптимизация должна быть сделана как дополнение к этому.

1
ответ дан 3 December 2019 в 11:21
поделиться
Другие вопросы по тегам:

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