Nano Hash - криптовалюты, майнинг, программирование

Дизайн: бизнес-логика или хранилище данных при манипулировании данными во время нагрузок

Я разделил свою программу между хранилищем данных и бизнес-логикой.

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

Это означает, что когда я загружаю данные, «правильные» данные - это новейшее значение временных данных или зафиксированных данных.

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

Делая адвоката дьявола, я получаю следующие два утверждения.


Проблема с хранилищем данных

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

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


Проблема с бизнес-логикой

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


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

Где бы вы разместили информацию и почему следует использовать / избегать бизнес-логики / хранилища данных для этой задачи?


Ответы:


1

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

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

17.11.2013
  • Если я правильно прочитал, ваше предложение - решить, что запрашивается, и позволить стороне управления данными обрабатывать этот результат. (его логика, его выбор). Оставляя Business Logic решать, что нужно делать с этими данными при загрузке? (так что оболочка помещается так сказать на стороне управления данными) 17.11.2013
  • В итоге я сказал, что передача была решена только с 1 результатом, и задача менеджеров данных заключалась в том, чтобы сократить сохраненные данные до этого 1 результата и получить их в правильном формате. В этом случае я узнал об объединениях, когда сделал запрос к базе данных, который сбросил результат до того, что я хотел вытащить. 18.11.2013

  • 2

    Я бы использовал уровень бизнес-логики. (учитывая ваше описание выше)

    Причина, по которой у вас есть этот вопрос / дилемма, заключается в том, что вы не используете уровень домена.

    Бизнес-уровень должен взаимодействовать с уровнем данных, используя это определение домена. Если бы уровень данных разбился на 2 таблицы. Затем он должен объединиться при извлечении.

    Итак, без домена или модели, что является «контрактом» между уровнем данных и бизнесом. Где это определяется.

    Ответьте на вопрос о предметной области / модели или о том, где определяется контракт / интерфейс. Тогда вам будет ближе ваш ответ.

    Рекомендуемое чтение. DDD Дизайн, управляемый доменами, или иногда называемый разработкой, управляемой доменами.

    17.11.2013
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..