@oop_ru

Страница 727 из 785
Sergey
28.08.2018
22:23:20
прям да

прям даже не делаю интерфейсы)

потому что всеравно реализация репозитория под сущность одна единственная

Google
Adel
28.08.2018
22:23:52
ну не делать интерфейсы - это норм :)

надо будет - сделать легко. но рядом класть... такое :)

одно - из домена. другое - из инфраструктуры

Dmitry
28.08.2018
22:26:08
меня парит, что получается User и User две разных сущности (DO и DS объекты). Допустимо ли ту модель, которая к базе ближе именовать UserRow, например?

Dmitry
28.08.2018
22:28:06
DO

Adel
28.08.2018
22:29:02
чтотакое do? domainobject? а в чем разница?

у меня почемуто сразу домен обьекты выдает ORM

Dmitry
28.08.2018
22:38:49
да, domain object я задумался. я не работал с ORM — может оно и является репозиторием для DO? в базе будет храниться сильно меньше полей, чем нужно в рантайме разве нет правила, по которому один тип объекта только на смежных слоях/уровнях используется? если буду её тянуть с уровня DS то она через три уровня пройдёт как я понимаю, тот User, что лежит рядом со Storage и является моделью, нужен только для того, чтобы сохранить/достать «Домееного» юзера из базы и не должен с ним особо пересекаться. но я могу и ошибаться

т.е. у базы — это просто POJO строка из базы. а в домене — уже с логикой

Adel
28.08.2018
22:52:15
в ОРМ просто описывается маппинг, строки и релейшенов там.. на доменные обьекты. и оно само из базы готовит нам обьект. и сохраняет правильно.

Dmitry
28.08.2018
23:03:30
ну, получается, там не нужны «низкоуровневые» классы — DAO и модель к нему и, наверное, не нужен репозиторий. а если ORM нет, как у меня, тогда оно начинает быть нужно

Aleh
28.08.2018
23:06:11
Забудь про слои и просто скинь все в одну папку, будет лучше на старте, чем наличие ненужных "слоев"

Google
Dmitry
28.08.2018
23:14:32
это уже не старт, это попытка сделать из «папки» более удобную структуру (вместе с усложнением проекта)

Sergey
29.08.2018
00:05:14
одно - из домена. другое - из инфраструктуры
и в чем проблема если оно отделено друг от друга?)

Aleh
29.08.2018
07:53:50
это уже не старт, это попытка сделать из «папки» более удобную структуру (вместе с усложнением проекта)
Когда дойдет до контекстов и разбиение реально понадобится - разобьешь

Денис
29.08.2018
08:09:10
Привет коллеги! Разсудите пожалуйста. Разрабатываю архитектуру модуля мониторинга автотранспорта и сотрудников для ERP системы. Всё как обычно: жпс-трекеры, приложения на смартфонах - передают данные на сервер, где они хранятся. Необходимо в будущем строить отчеты по пробегу автомобилей, формировать путевые листы по каждому автомобилю, необходимо также иметь оперативную информацию о местоположению автомобилей, сотрудников и другой мониторируемой техники. Вопрос вот в чем. Я раньше всегда в подобных случаях хранил гео-данные с ЖПС-трекеров с привязкой к этим трекерам (т.е. трекерИД, геоточка, скорость и т.д.), но сейчас меня осенило, что это, возможно, неверный подход и я пытаюсь протащить новую идею - хранить гео-данные с привязкой к конкретному объекту наблюдения. Это позволит, например, менять жпс-трекеры на автомобиле (в случае поломки трекера, например) и при этом проодлжать собирать информацию в разрезе того же автомобиля. Мои коллеги, привыкшие к хранению гео-данных в разрезе трекеров, пока что очень сопротивляются дмнному решению. Хотелось бы узнать мнение сообщества по этому поводу: 1. Хранить гео-данные относительно трекеров? или 2. Хранить гео-данные относительно объектов наблюдения?

Dmitriy
29.08.2018
08:13:41
Ты в любом случае снимаешь данные с трекеров и привязываешь их к объектам наблюдения. Т.е. можно сделать реляцию Объект наблюдения -> one 2 many -> Трекер -> one 2 many -> гео-данные

Можно выкинуть из этой схемы трекер, но суть не поменяется.

Денис
29.08.2018
08:14:50
в старой системе так и есть, но проблема в том, что трекеры гуляют между машинами. трекер сломался - его сняли, отремонтировали, положилди на склад, через время установили на другую машингу

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

То, о чем я говорю - это уход от понятия "трекер" вообще. Предполагается, что не важно, каким способом были получены гео-данные: или трекером №1 или трекером №25 - они при получении будут привязаны сразу же к наблюдаемому объекту. То есть данные будут храниться не для каждого трекера, а для каждого, скажем, автомобиля

Dmitriy
29.08.2018
08:17:07
тогда конечно лучше денормализовывать данные

Денис
29.08.2018
08:17:27
то есть хранить и для трекера и для автомобиля одновременно?

Adel
29.08.2018
08:17:38
можно простодобавить денормализованное поле. object_id для гео-данных

всего одно

Bohdan
29.08.2018
08:17:45
трекер как устройство в принципе не должно иметь отношения к данным трекинга автомобиля

Dmitriy
29.08.2018
08:18:01
хотя у вас же постгря, там можно через оконные функции все спокойно посчитать. Оптимизатор справится с такой задачей на ура)

Bohdan
29.08.2018
08:18:08
но это имхо в общем - да, я бы убрал привязку к трекеру

Денис
29.08.2018
08:18:14
можно простодобавить денормализованное поле. object_id для гео-данных
вот я, кстати, об этом тоже думал. добавить поле, чтобы и трекер_ид и объект_ид писать для каждой гео-позиции

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

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

Google
Dmitriy
29.08.2018
08:19:52
когда линейки китайские, то лучше записывать какой замерял, потому что у них миллиметры разные по размеру чаще всего))

зачем усложнять? :)
аналитические функции и существуют для таких задач

Bohdan
29.08.2018
08:20:33
ну учитывать то, какой трекер где стоял в какой период времени нужно

но конкретные геоданные относятся к машине, а не к трекеру

Денис
29.08.2018
08:21:07
аналитические функции и существуют для таких задач
а есть ли смысл? должен быть смысл, но я его не вижу, точнее перестал видеть. ведь я тоже раньше хранил гео-позиции в разрезе трекеров и был уверен, что это правильно.

?

Dmitriy
29.08.2018
08:22:08
object_id, tracker_id, long, lat, date и норм)

по этой таблице можно будет отследить время смены оборудования, если надо

Денис
29.08.2018
08:22:46
То есть идея, в общем-то, верная. Трекеры - всего лишь инструменты для получения информации о местоположении объекта. Нам нужно учитывать эти инстурменты только со стороны учета их движения в системе, как товаров (ТМЦ), но не хранить их историю местоположений. А информация, измеренная этими инстурментами, относится непосредственно к тем объектам, которые измеряются.

object_id, tracker_id, long, lat, date и норм)
это была такая мысль тоже. но не нравится. избыточно. в конечном итоге, эта информация никогда не пригодится, а места на диске займет не мало

Денис
29.08.2018
08:24:36
Спасибо! Теперь я спокоен :)

Sergey
29.08.2018
08:24:50
Привет коллеги! Разсудите пожалуйста. Разрабатываю архитектуру модуля мониторинга автотранспорта и сотрудников для ERP системы. Всё как обычно: жпс-трекеры, приложения на смартфонах - передают данные на сервер, где они хранятся. Необходимо в будущем строить отчеты по пробегу автомобилей, формировать путевые листы по каждому автомобилю, необходимо также иметь оперативную информацию о местоположению автомобилей, сотрудников и другой мониторируемой техники. Вопрос вот в чем. Я раньше всегда в подобных случаях хранил гео-данные с ЖПС-трекеров с привязкой к этим трекерам (т.е. трекерИД, геоточка, скорость и т.д.), но сейчас меня осенило, что это, возможно, неверный подход и я пытаюсь протащить новую идею - хранить гео-данные с привязкой к конкретному объекту наблюдения. Это позволит, например, менять жпс-трекеры на автомобиле (в случае поломки трекера, например) и при этом проодлжать собирать информацию в разрезе того же автомобиля. Мои коллеги, привыкшие к хранению гео-данных в разрезе трекеров, пока что очень сопротивляются дмнному решению. Хотелось бы узнать мнение сообщества по этому поводу: 1. Хранить гео-данные относительно трекеров? или 2. Хранить гео-данные относительно объектов наблюдения?
второй вариант логичнее, тем более если тебе приходит инфа какая машина сейчас используется.

Денис
29.08.2018
08:26:32
второй вариант логичнее, тем более если тебе приходит инфа какая машина сейчас используется.
"приходит инфа какая машина сейчас используется." - в каком смысле?

Sergey
29.08.2018
08:27:11
ну типа айдишка машины вместе с геоданными. Или у тебя есть только айдишка трекера + данные какая машина сейчас какой трекер юзает

Денис
29.08.2018
08:28:10
с геоданными ИД трекера нет. трекер "не знает" где он установлен. зачем ему это

но сервер-коллектор при авторизации трекера в системе может запросто получать от системы ИД автомобиля и дальше уже писать в базу именно ИД автомобиля - тут проблем нет

трекер подключается к серверу и авторизуется. сервер (модуль системы) запрашивает у ядра, можно ли этому трекеру авторизиваться. Если трекер привязан к автомобилю, то дается разрешение в сторону сервера и сервер подтверждает авторизацию. Вместе с этим разрешением в сторону сервера ядро может передать что угодно. Так что нет проблемы передать ИД автомобиля в модуль и далее использовать миенно его.

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

Google
F01134H
29.08.2018
11:00:05
Тут уже кажется было такое. Скажите, а нужен ли эксепшенам постфикс Exception?

И если не нужен, то почему

Adel
29.08.2018
11:03:41
InvalidArgumentException - нужно

а не

там тоже можно опустить

Admin
ERROR: S client not available

F01134H
29.08.2018
11:04:07
И получается каша

Артур Евгеньевич
29.08.2018
11:04:26
Я добавляю. Ну в контраргумент обычно приводят, то что по имени исключения и так должно быть понятно что произола неприятность типо ServiceNotFound, StorageWasFull

F01134H
29.08.2018
11:04:27
А если у меня есть ServiceException, который является родителем для ряда других эксепшенов

Adel
29.08.2018
11:04:31
кароч я лояльно отношусь к суффиксу Exception

Артур Евгеньевич
29.08.2018
11:04:45
InvalidArgumentException - нужно
это хреновое название)

InvalidArgumetnWasPassed

))

на самом деле я добавляю суффикс экспшн чтобы отличать экспшны от евентов

больше я не вижу пользы

militska
29.08.2018
11:05:28
c *Exception как то больше понятно что происходит

Артур Евгеньевич
29.08.2018
11:05:56
c *Exception как то больше понятно что происходит
а слово throw разве недостатчоно для понимания?

Aleh
29.08.2018
11:06:02
Эксепшены не нужны /thread

F01134H
29.08.2018
11:06:03
А если у меня есть ServiceException, который является родителем для ряда других эксепшенов
который сам по себе не говорит о какой-то конкретной ошибке, нельзя же его просто Service назваьт

Google
F01134H
29.08.2018
11:06:03
Разве что ServiceError, но это шило на мыло

Denis
29.08.2018
11:06:05
Главное делать однообразно) с суффиксом или без, но не когда часть с суффиксом и часть без))

Артур Евгеньевич
29.08.2018
11:06:26
ошибка службы

я под это определение любую могу подогнать ситуацию

пойду поем

F01134H
29.08.2018
11:07:03
по крайней мере в языке на котором я работаю точно

это прям 100%

Aleh
29.08.2018
11:07:38
Разве что ServiceError, но это шило на мыло
YourBoundedContextNamespace/Exception - базовый

F01134H
29.08.2018
11:07:41
это родитель для множества эксепшенов

Aleh
29.08.2018
11:07:50
Зачем базовому какой-то префикс

Sergey
29.08.2018
11:09:12
F01134H
29.08.2018
11:09:27
Да, половина с постфиксом, половина без

)

Sergey
29.08.2018
11:10:22
половина методов приватная половина публичная

каша какая-то

Страница 727 из 785