170 похожих чатов

Всем привет. Ребята, есть такой вопрос. Есть стуктуры данных, которые написаны

под DDD структуру.
Поэтому все поля у них приватные и реализованы только методы для работы с данными.

Например, есть структуры Amount, Asset и прочие.
Эти структуры нужно записывать в Монго в составе других аггрегатов и структур.
Для них реализованы методы MarshalJSON и UnmarshalJSON.

Я думал, что в случае если нет открытых полей, то Монго перегоняет структуру в JSON и таким образом сохраняет её.
Но так не происходит. Записывается в БД пустые данные. Типа того: Asset{}.

Есть какой-то интерфейс для того, чтобы реализовать верное сохранение данных в Монго для закрытых структур?
Пытался реализовать MarshalBSON, но там какая-то ерунда получается. Видимо он не для этого… Либо я не разобрался.

7 ответов

9 просмотров

Как из DDD следуют приватные поля в моделях? И уж что точно ему противоречит, так это маршаллинг моделей в JSON

Andrew-Popov Автор вопроса
Евгений Омельченко
Как из DDD следуют приватные поля в моделях? И уж ...

Дело в инкапсуляции данных. Если коротко, то по той же причине, по которой в Time скрыты вот эти поля: wall uint64 ext int64 loc *Location

я лично забил на этот момент и часто делаю поля публичными. Надо ответить на вопрос: от кого мы инкапсулируемся/защищаемся. Если этот доменный объект включен в какой-то общий пакет, тогда скорее всего нужны приватные поля. Может если над кодом работают много человек тоже надо. В остальных случаях от самого себя нет смысла защищаться

Andrew-Popov Автор вопроса
Evgeny Maltsev
я лично забил на этот момент и часто делаю поля пу...

Мне кажется, что это из разряда “если с кем-то встречась сегодня, то почищу зубы”. Любой коммерческий проект рано или поздно умрёт или появятся дополнительные разработчики. Сменится тот, кто поддерживает проект и прочее. А также может выделится в отдельный пакет, особенно на Го, как мне кажется, это наиболее вероятно. Поэтому уже сейчас работа с ценами и стоимостью через int привела к проблемам даже в маленькой команде. Кто-то забыл или не понял, что это в центах. А кто-то не понял в какой точности объем биткоина, и в какой эфириума… В общем, проблем много. И все они ушли после внедрения инкапсуляции. Да и ещё в сложных сервисах сразу всплыли ошибки при математики с ценами. Оказывается в некоторых случаях сравнивались или складывались несовместимые Amount. Это когда Amount был для разных Asset. Грубо говоря, биткоин складывался с долларом, что в случае использования int не выдаст ошибки, но приведёт к логической ошибке в коде.

Andrew Popov
Мне кажется, что это из разряда “если с кем-то вст...

Я вам так скажу: крайне сложно защитить код от глупого или ленивого программиста. Ибо он всегда может кастануть типы и сложить int-ы. В приведенном вами примере я не вижу плюсов в приватных полях. Достаточно описать валюту как тип и сделать для нее операции сложения и т.д.

Andrew-Popov Автор вопроса
Виталий Фунтиков
Я вам так скажу: крайне сложно защитить код от глу...

Не могу с Вами согласиться… Если я вижу структуру с открытым полем, то логично сделать вывод, что я могу её поменять, вывести и тп Если открытых полей нет, то любой программист озадачится вопросом, а какие есть у неё методы для работы с данными? И с 90% вероятностью найдёт нужный и использует его. В случае наличия открытых полей 90% программистов не станут разбираться в методах. Кроме того, в 90% случаях обязательно кто-то привяжется к этим полям во внешнем коде. Что при желании отрефакторить внутреннюю структуру приведёт к проблемам. А если инициализация структуры требует валидации входных данных, то с открытыми полями совсем печально. Даже при наличии конструктора всегда есть возможность инициализации напрямую. В общем, есть масса условий при которых я бы не стал так делать…

Для монги нужен отдельный контракт с публичными полями. Тогда всё будет нормально маршаллиться

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

Обсуждают сегодня

@Aiwan что такое база образца?
Alexey
27
Не многие знают, а кто знает, тот уже успел забыть, что в далёком 2004 году эта игра произвела настоящий фурор, настолько революционной была технология, применяемая для её соз...
ICCID
4
коллеги, добрый вечер! А никто не знает как модальная форма может себя закрыть? Ну допустим модальная форма определила, что смысла ей работать нет и хочет вернуть modalResult...
Михаил
83
Короче я тут узнал полный пиздец Что кучу постов которые я создавал через posted Спустя время не могу редактировать и менять Мол телега возвращае ошибку Это реально так ...
inc.
13
Хотя у меня сейчас есть более сложная задача, вот её думаю: как объяснить челу переходного возраста противоположного полу, обучающегося в польском колледже (а-ля наш техникум)...
Вячеслав Кузьменко
15
а сколько всего в IT умерло? Где флеш-игры, их было туча, где они все? Сегодня технология есть, а завтра вжух и мёртвая. Этот wasm сильно напоминает джавовские апплеты, silver...
Constantin F.
5
Добрый день Хочу начать обучение языку, не являюсь представителем it, буду благодарна за помощь, совсем пока не понимаю ничего) Подскажите, пожалуйста, где можно начать первы...
Sara Lala
30
а вы в курсе, что Initialize() не работает? var arr123: array[0..123] of Byte; ... Initialize(arr123, SizeOf(arr123));
Iluha Companets
8
что читать по делфи?вообще 0 в нем
fd dsds
9
верно что я могу удалить эти addq и subq т.к. со стеком никакого взаимодействия нет (исключая call)?
Michael
16
Карта сайта