@ru_python

Страница 7961 из 9768
Алексей
01.02.2019
12:18:10
Непонятно почему ты SRP притягиваешь к моделям ORM
Потому что у нас тут спор про active record. И это всё связанно.

Andrew
01.02.2019
12:19:31
Потому что у нас тут спор про active record. И это всё связанно.
модель и её lazy связи уже приводят к тому что ты оперируешь несколькими классами

Bogdan (SirEdvin)
01.02.2019
12:19:42
А в этом какая проблема?
Проблема начинается тогда, когда этой логики становится ОЧЕНЬ много и из-за этого становится практически невозможно проводить юнит тестирование, так как все связано со всем. То есть изоляция между компонентами отсутствует, легко задеть один, изменяя другой и так далее. Я это испытывал на проектах с odoo, когда каждый раз мы упирались в то, что юнит-тестирование практически невозможно, потому что отдельная функция делать ничего и все сразу

Google
Bogdan (SirEdvin)
01.02.2019
12:19:58
И только интеграционка, только очень долгие и сложные тесты

Bogdan (SirEdvin)
01.02.2019
12:20:51
Ну и логика разлезается по всем этим актив рекордам, вместо того, что бы быть сконцетрированной в нужных местах

Denis
01.02.2019
12:21:23
Ну и логика разлезается по всем этим актив рекордам, вместо того, что бы быть сконцетрированной в нужных местах
Если юзер должен активироваться единственно верным способом, куда его засунуть, кроме как в User.activate()

Denis
01.02.2019
12:22:05
UserService.active(user)?
А service это что?

Bogdan (SirEdvin)
01.02.2019
12:22:23
Кусок логики, который оперирует сущностью или бизнес-процессом

Алексей
01.02.2019
12:22:47
модель и её lazy связи уже приводят к тому что ты оперируешь несколькими классами
Я не про это. Я больше про то, что модель знает, что она модель что в active record, что в data mapper. И программисту приходится это тоже знать. Так что с одной стороны, active record - это антипаттерн, с другой стороны, многие реализции data mapper как бы оказываются не сильно лучше.

Denis
01.02.2019
12:22:47
Если он оперирует сущностями, это все же часть модели

Если нет, это часть view, но тогда его придется дублировать

Bogdan (SirEdvin)
01.02.2019
12:23:27
Если он оперирует сущностями, это все же часть модели
Он не отвечает за данные - он часть бизнес-процесса, обычно.

Google
Bogdan (SirEdvin)
01.02.2019
12:24:04
По идее смысл в том, что в модели нужно хранить исключительно логику работы с данными модели - все остальное не должно в ней лежать

Denis
01.02.2019
12:24:04
Он не отвечает за данные - он часть бизнес-процесса, обычно.
И в чем принципиальное отличие от методов непосредственно модели?

Джанго орм с тобой не соглашается

Bogdan (SirEdvin)
01.02.2019
12:24:35
Например, в том, что для тестирования такого кода вам не нужна модель?

Джанго орм с тобой не соглашается
Хм ... а где? Ну, если что, я отношу работу с бд к работой с данными

Denis
01.02.2019
12:25:11
Например, в том, что для тестирования такого кода вам не нужна модель?
Ну как не нужна. Чтобы проверить активацию юзера, надо, наверное, создать юзера и посмотреть, что с ним происходит при активации

Хм ... а где? Ну, если что, я отношу работу с бд к работой с данными
В стандартном классе User много разных методов

Bogdan (SirEdvin)
01.02.2019
12:25:49
В стандартном классе User много разных методов
Эх, жаль, что мы его не используем :)

Denis
01.02.2019
12:26:00
Создание, проверка паролей, разрешений и всего такого

Туда можно передать мок объект и проверить, что нужные изменения произведены.
Но можно просто создать юзера. Джанга делает тестирование кода, работающего с бд, довольно удобным

Bogdan (SirEdvin)
01.02.2019
12:27:58
Ну, у меня просто отходняк от odoo, где нельзя было просто создать один объект. Нужно было создать их штук 20, с кучей разных данных, правильно заполненный и так далее.

Denis
01.02.2019
12:28:40
Если надо создавать 20 объектов, то и одного мока не хватит

Bogdan (SirEdvin)
01.02.2019
12:29:19
Если разделить логику, что бы бизнес-операции были атомарны, то это не нужно

Но в active record после какого-то момента это слишком сложно сделать

Denis
01.02.2019
12:30:31
Но иногда активация юзера хочет еще отправить кому-то уведомление, изменить какую-то статистику и еще много всего. Тут вроде без разницы, каким способом тестировать, все равно будет сложно без моков

Denis
01.02.2019
12:32:40
Да где бы она ни была, тестирование проще не станет

Danil
01.02.2019
12:38:36
Подскажите, если я с первого процесса пишу в файл, а с другого процесса хочу проверить, открыл ли ещё этот файл на запись, как я могу сделать это? Обычный open () не выдает никакого ексепшена

Google
Danil
01.02.2019
12:44:24
правильно не выдает, и не должен выдавать.
как быть? Даже если я переименновываю его, он мне просто создает новый)

Alex
01.02.2019
12:44:26
на самом деле надежного способа сделать это не существует. есть файловые блокировки через flock()

Alex
01.02.2019
12:47:11
гугли по fcntl / flock или exlusive file lock linux

туда же в догонку (при всей моей не любвик к Автору) статья http://0pointer.de/blog/projects/locking.html

Tishka17
01.02.2019
12:48:25
то ест ья конечно на локах делал себе локальный кэш файлов, но наверняка для твоего кейса есть решение лучше

Danil
01.02.2019
12:49:29
а заяем именно такая последовательность?
мне сказали так, решение такое

Tishka17
01.02.2019
12:49:49
а тебе для чего это?

Svyat
01.02.2019
12:52:19
Кто нибудь интересовался управлением linux через snmp?

Tishka17
01.02.2019
12:52:35
/me не доверяет snmp

там же авторизации толком нет

фей
01.02.2019
12:53:00
Здрасте. Подскажите, плиз, какими инструментами можно считать и визуализировать формат .csv через питон?

Svyat
01.02.2019
12:53:19
Alex
01.02.2019
12:53:22
там же авторизации толком нет
ты хотел сказать аутентификации.

Tishka17
01.02.2019
12:53:22
считать через import csv, визуализировать - это как?

ты хотел сказать аутентификации.
ну скорее все таки авторизации. Не слишком безопасно определяется можно давать досутп или нет

фей
01.02.2019
12:54:53
считать через import csv, визуализировать - это как?
Визуализировать данные трехмерной матрицы

Terminator
01.02.2019
12:54:53
@vyat1ch будет жить. Поприветствуем!

Google
Danil
01.02.2019
12:55:41
а тебе для чего это?
ну есть скрпит который пишет в файлы. Есть другой скрпит,в котором первый процесс считывает названия этих файлов и складывает их названия в очередь. Другой процесс - пишет в базу с них, удаляет файлы. А проверять мне нужно, потому что между первым и и вторым процессом идет обмен СПИСКОМ, и если этот файл уже ждет своего удаления во втором процессе, то первый процесс этого знать не будет и запишет его вновь на отправку во второй процесс. Если он будет видеть, что тот файл открыл - он этого не сделает

Inf
01.02.2019
12:56:02
почему такая ошибка может происходить? free() invalid next size (normal)

Tishka17
01.02.2019
12:57:42
считайте это моей философией: если хочешь помочь, вместо того чтобы ответить человеку на вопрос уточни зачем ему это надо. Наверняка он уже делает что-то не то

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

ну я про данный кейс

Tishka17
01.02.2019
12:59:05
xyproblem же
ну типа

Alex
01.02.2019
12:59:06
а мне лень докапываться.

=(

Danil
01.02.2019
12:59:18
а теперь к вопросу 1. Зачем ты так сделал?
мне так сказал человек стоящий "выше". Я всего лишь выполняю таски

Tishka17
01.02.2019
12:59:19
когда лень, я не пишу в чат

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

Alex
01.02.2019
12:59:54
мне так сказал человек стоящий "выше". Я всего лишь выполняю таски
ну очевидно что стоящий выше возможно некометентен

Danil
01.02.2019
13:00:03
я не могу оспорить

я пытался

Tishka17
01.02.2019
13:00:09
ну либо произошло недопонимание

Google
Alex
01.02.2019
13:00:15
что тоже возможно

Danil
01.02.2019
13:00:18
еще с самой начала, когда возникла идея писать в файлы

но, увы)

ладно

Tishka17
01.02.2019
13:00:27
а какйо аргумент был?

Danil
01.02.2019
13:00:43
"это самое простое. Небольшой костылик но будет работать"

Alex
01.02.2019
13:00:47
вообще в идеале у тебя не должно быть ситуации когда с одним файлом работают > 1 процесса.

на запись

Alex
01.02.2019
13:01:31
"это самое простое. Небольшой костылик но будет работать"
у меня сейчас весь проект из таких "небольших" костыликов состоит

Tishka17
01.02.2019
13:01:32
и тут это делается просто

Alex
01.02.2019
13:01:35
хочется стреляться.

Danil
01.02.2019
13:02:22
а

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

поэтому нужна проверка, открыт ли файл или нет

Tishka17
01.02.2019
13:03:44
Не надо так

Danil
01.02.2019
13:03:49
не могу(

Tishka17
01.02.2019
13:04:08
Зачем ты второму скрипту отдаёшь имя файла, если ещё не закрыл?

Danil
01.02.2019
13:04:14
этот скрипт - это АПИ функция. не будет запроса - функция не вызовится

Страница 7961 из 9768