|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
Здравствуйте! У меня возникла проблема в моем приложении, связанна она с одновременным доступом нескольких пользователей на редактирование одной и той же записи в таблице. Почитав мануалы, я вычитал, что в EntityFrameWork по умолчанию нет ограничений на одновременное редактирование одной записи несколькими пользователями. Что я нашел для решения этого вопроса: 1. Аннотация [ConcurrencyCheck] на определенное поле 2. Аннотация [Timestamp] public byte[] RowVersion { get; set; } это на строку в целом. Решение как оказывается есть, но оно не решает задачу полностью. Так как это работает только тогда, когда пользователь захочет сохранить данные. А за это время другой пользователь может открыть туже самую запись, и изменить поля, а при сохранении у вылетит ошибка о том что эту строку уже кто-то вперед его сохранил. Соответственно, все что второй пользователь вносил было напрасно. Как реализовать так, чтобы второй пользователь изначально видел, что строка уже редактируется первым пользователем до её сохранения в базу данных первым пользователем? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2016, 09:30 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
На мой взгляд, решение нужно не на уровне EF, а выше - на уровне программной логики. То есть вести пул, кто какие записи открывает на редактирование (необязательно в конкретной таблице, возможно общий подход на всё приложение). Тогда никто не помешает другим пользователям просматривать эту запись в режиме "только для чтения", что часто важно в многопользовательском приложении. Проверка и блокировка происходит только тогда, когда пользователь пытается перейти в режим редактирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2016, 10:04 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
Shocker.ProНа мой взгляд, решение нужно не на уровне EF, а выше - на уровне программной логики. То есть вести пул, кто какие записи открывает на редактирование (необязательно в конкретной таблице, возможно общий подход на всё приложение). Тогда никто не помешает другим пользователям просматривать эту запись в режиме "только для чтения", что часто важно в многопользовательском приложении. Проверка и блокировка происходит только тогда, когда пользователь пытается перейти в режим редактирования. На уровне логики приложения, это велосипед придется лепить причем с кучей исключений. Так как у меня wpf с реализацией постраничной. Пользователь может гулять по взаимосвязанным формам редактирования. Я то думал что можно использовать какой-то стандартный набор инструментов для реализации этой задачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2016, 10:18 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
Почитай про оптимистическую блокировку . Может найдешь подход разрешения конфликтов, который тебя устроит. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2016, 10:28 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
Стандартного набора нет, т.к. сама задача нестандартна. Как выше писали, это бизнесовый кейс и отрабатывать его придётся велосипедом. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2016, 13:12 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
Dima TПочитай про оптимистическую блокировку . Может найдешь подход разрешения конфликтов, который тебя устроит. http://professorweb.ru/my/LINQ/linq_sql/level13/13_1.php Читаю пока это, возможно это тоже подойдет. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2016, 13:25 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
СмузиСтандартного набора нет, т.к. сама задача нестандартна. Как выше писали, это бизнесовый кейс и отрабатывать его придётся велосипедом. хехе это всегда была стандартно задачей то что кто то сделал стандартом оптимистическую блокировку не означает что пессимизм уже никому не нужен ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2016, 16:09 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
NechtoКак реализовать так, чтобы второй пользователь изначально видел, что строка уже редактируется первым пользователем до её сохранения в базу данных первым пользователем? Каким-то образом определять, что запись была изменена на моменте сохранения и решать что с этим делать: перезаписать, предупредить пользователя о перезаписи или что-то ещё. Смотря что тебе нужно. Определять изменение можно по времени изменения, или по штампу изменений, или по истории изменений. Миллион вариантов. Процесс обновления локать, но аккуратно. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2016, 16:33 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRosэто всегда была стандартно задачей Так там кейсов море "что делать, если"... В стандарты никак не лезет. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2016, 16:50 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
Смузи, До ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2016, 17:13 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRos, после ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2016, 17:13 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRos, блокировать всю запись - плохо. Нужно блокировать только поля, а это уже бизнесовая фича. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2016, 19:49 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
СмузиViPRos, блокировать всю запись - плохо. Нужно блокировать только поля, а это уже бизнесовая фича. Ты знаешь как это устроено? Или исходишь от "запись заблокирована"? Будут блокированы некоторые поля (запись примитивного типа), если тип композитный :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2016, 20:25 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRos, Никакая эта не бизнес фича, а архитектурный паттерн - Разделяй и властвуй! ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2016, 20:26 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
В MSSQL есть блокировки уровня приложения sp_getapplock , но они привязаны к соединению, а оно постоянно меняется. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2016, 20:29 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRosНикакая эта не бизнес фича, а архитектурный паттерн - Разделяй и властвуй! Не понимаю, какой еще паттерн. БД не может эскалировать column level блокировки, в движке ADO.NET тоже нет такого, ORM тоже такое не поддерживают (есть некоторые вещи, но этого мало). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2016, 20:52 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
СмузиViPRosНикакая эта не бизнес фича, а архитектурный паттерн - Разделяй и властвуй! Не понимаю, какой еще паттерн. БД не может эскалировать column level блокировки, в движке ADO.NET тоже нет такого, ORM тоже такое не поддерживают (есть некоторые вещи, но этого мало). Ну я то в этом не виноват :) Блокировать можно и нужно (это очень частое требование, особенно у тех, у кого (по их мнению) много секретов (которые интересны только им самим воще то)) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2016, 20:57 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRosБлокировать можно и нужно Так я ж не против. Вопрос в том, как это делать. 1. Пользователь начал редактировать конкретное поле записи, взвели таймстэмп в связке с identity. 2. Save => таймстэмп обнулили. 3. Пока таймстэмп не обнулен, другим пользователям не доступно поле для редактирования. 4. Плюс заложили дельту времени на простой с автообнулением таймстэмпа. Вот тебе и вся архитектура :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2016, 21:08 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
СмузиViPRosБлокировать можно и нужно Так я ж не против. Вопрос в том, как это делать. 1. Пользователь начал редактировать конкретное поле записи, взвели таймстэмп в связке с identity. 2. Save => таймстэмп обнулили. 3. Пока таймстэмп не обнулен, другим пользователям не доступно поле для редактирования. 4. Плюс заложили дельту времени на простой с автообнулением таймстэмпа. Вот тебе и вся архитектура :) Надо рассчитывать на то что с БД работают и другие приложения и им пофиг твои соглашения. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2016, 21:22 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRosНадо рассчитывать на то что с БД работают и другие приложения и им пофиг твои соглашения. Не вижу противоречий. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2016, 22:07 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
СмузиViPRosНадо рассчитывать на то что с БД работают и другие приложения и им пофиг твои соглашения. Не вижу противоречий. что то не въехал, старею что ль :( как твоя конструкция мешает мне сделать Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2016, 22:46 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRos, а твоя защищает от админского DROP DATABASE? Не понимаю проблемы. Если ты в обход логики что-то на стороне апдейтишь, какой смысл уповать на ту самую логику. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2016, 22:53 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
СмузиViPRos, а твоя защищает от админского DROP DATABASE? Не понимаю проблемы. Если ты в обход логики что-то на стороне апдейтишь, какой смысл уповать на ту самую логику. 1. Ну я ж сказал, что с БД могут работать разные приложения и они чихали на твои внутриприложенческие соглашения об этичности некоторых действий. 2. Защищает. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2016, 22:56 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRos1. Ну я ж сказал, что с БД могут работать разные приложения и они чихали на твои внутриприложенческие соглашения об этичности некоторых действий. 2. Защищает. Я ж намекнул, что все приложения должны ходить в БД через единое API. Если это не так, то грошь цена твоей песочнице. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2016, 23:30 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
СмузиViPRos1. Ну я ж сказал, что с БД могут работать разные приложения и они чихали на твои внутриприложенческие соглашения об этичности некоторых действий. 2. Защищает. Я ж намекнул, что все приложения должны ходить в БД через единое API. Если это не так, то грошь цена твоей песочнице. Мусь, не начинай. Никто не будет переписывать свои зоопарк из какого-то сраного ОРМ, который не умеет работать с пессимизме и требует - О УЖОС!!! - какие то ДТО (что за зверь, с чем едят, какой недоумок придумал?) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2016, 23:43 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRosНикто не будет переписывать свои зоопарк из какого-то сраного ОРМ А ORM тут вообще не при делах, я говорю про единое API системы. Тогда любая сторонняя программа, использующая это API, будет играть по бизнес правилам, а не против них. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 00:25 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRosСмузипропущено... Так я ж не против. Вопрос в том, как это делать. 1. Пользователь начал редактировать конкретное поле записи, взвели таймстэмп в связке с identity. 2. Save => таймстэмп обнулили. 3. Пока таймстэмп не обнулен, другим пользователям не доступно поле для редактирования. 4. Плюс заложили дельту времени на простой с автообнулением таймстэмпа. Вот тебе и вся архитектура :) Надо рассчитывать на то что с БД работают и другие приложения и им пофиг твои соглашения. и как ты это победил? навесил триггер который пишет в стороннюю таблицу начальную версию строки таблицы, и если из доп табл копию строки не грохнули то тригер не позволяет изменить строку или что получше? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 00:54 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
СмузиViPRosНикто не будет переписывать свои зоопарк из какого-то сраного ОРМ А ORM тут вообще не при делах, я говорю про единое API системы. Тогда любая сторонняя программа, использующая это API, будет играть по бизнес правилам, а не против них. Ладно, я за дружбу и общий АПИ на все случаи жизни! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 01:12 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
СмузиViPRos1. Ну я ж сказал, что с БД могут работать разные приложения и они чихали на твои внутриприложенческие соглашения об этичности некоторых действий. 2. Защищает. Я ж намекнул, что все приложения должны ходить в БД через единое API. Если это не так, то грошь цена твоей песочнице. ты про то что API - означает реализация изменений таблиц в логике БД, то есть только в процедурах БД!? А если одно приложение на PHP другое на Java то им в DAL дублировать логику? И как всегда тогда человеческий фактор. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 01:46 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRos, колись давай, Штирлиц, какое у тебя решение? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 01:47 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
Var79ViPRos, колись давай, Штирлиц, какое у тебя решение? Каждый кто допущен к БД делает все что ему положено. Если ПХП захочет грохнуть БД, то он может это сделать, если только ВИПРОС позволит (это возможно, если структура БД не законтрактована кодом контролируемым ВИПРОС). Просто ВИПРОС контролирует метаданные и не дает грохать структуру БД которую стережет. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 03:34 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRos, Вопрос в том, как это делать. Я предположу что можно обойтись триггером на таблице 1, который пишет запись о блокировке, в отдельную таблицу 2. При изменении таблицы 1, триггер смотрит есть ли запись в таблице 2, если есть - не дает поменять. Что бы поменять таблицу 1, ORM должна сначала удалять запись из таблицы 2, затем уже ORM может менять запись в таблице 1. А у тебя какое решение, вдруг есть другое, возможно более удачное? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 04:24 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRos, тем более что ты сам писал авторНадо рассчитывать на то что с БД работают и другие приложения и им пофиг твои соглашения. так вот, мне и интересны возможные решения. А не то что ВИПРОС что то делает . Мне интересно исключительно как кто то / что то делает . ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 04:28 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
СмузиViPRos, а твоя защищает от админского DROP DATABASE? Не понимаю проблемы. Если ты в обход логики что-то на стороне апдейтишь, какой смысл уповать на ту самую логику. да всем пофиг на DROP DATABASE. есть бекапы. что бы не апдейтить в обход логики - нужно логику делать в БД? на какую " ту самую ", на ту другую , которая на стороне web-сервера? Или ту первую которая в БД? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 04:33 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRos, По-моему ты запутался в том, что обсуждается :) МСУ прав, ты пытаешься скрестить ужа с ежом, и самое ужасное, что тебе кажется, что это нормально. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 08:05 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ИМХУ надо конкретные примеры обсуждать. Не так уж и часто требуется одновременная запись. А там где требуется - не часто создает проблемы. Например в справочник забили клиента ООО "Рога и кАпыта", затем двое одновременно решили поправить, то какая разница кто первым сохранит ООО "Рога и копыта" ? А там где критично, например остаток товара, когда при всем желании не продать два раза последнюю упаковку, надо просто предусматривать резервирование сразу после ввода количества, при неудачном резервировании оповещать. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 08:26 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
Var79А если одно приложение на PHP другое на Java то им в DAL дублировать логику? Единое HTTP REST API. С ним умеют работать даже комсомольцы. Никакого дублирования логики. Var79да всем пофиг на DROP DATABASE. есть бекапы. Стороннее приложение не должно быть допущено даже к схеме, не говоря уже о DROP. Var79что бы не апдейтить в обход логики - нужно логику делать в БД? Выше ответил. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 09:11 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
Dima TНапример в справочник забили клиента ООО "Рога и кАпыта", затем двое одновременно решили поправить, то какая разница кто первым сохранит ООО "Рога и копыта" ? Разницы нет. Но если ты открыл запись в одном состоянии, а в итоге сохраняешь на запись, находящуюся уже в другом состоянии, то это может быть проблемой. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 10:49 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
Dima TНе так уж и часто требуется одновременная запись. А там где требуется - не часто создает проблемы. Всё верно. Но только я бы заменил "Не так уж и часто требуется" на "Мы часто на это забиваем болт". Поэтому наши программы работают по принципу тапок - кто первый встал, того и они. Есть ряд промышленных систем, в которых это уже недопустимо. Приходится пилить. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 12:40 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
Смузикто первый последний встал, того и они. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 12:41 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
hVosttViPRos, По-моему ты запутался в том, что обсуждается :) МСУ прав, ты пытаешься скрестить ужа с ежом, и самое ужасное, что тебе кажется, что это нормально. А по моему ты нифига не смыслишь в ужах и ежах (тут не зоопарк все же, а лоскутная автоматизация) Муся и сам прекрасно знает, что он не прав, просто по инерции спорит, характер у него такой Ничего я не пытаюсь, просто прога пашет в выбранном режиме - оптимизм ( с вариациями), пессимизм (с вариациями), смешанный режим ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 13:19 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
Var79ViPRos, тем более что ты сам писал авторНадо рассчитывать на то что с БД работают и другие приложения и им пофиг твои соглашения. так вот, мне и интересны возможные решения. А не то что ВИПРОС что то делает . Мне интересно исключительно как кто то / что то делает . Пользуемся уровнями изоляции транзакций, декларацией намерений о будущих действиях, структурными и техническими приемами уменьшения эскалации блокировок, управлением жизненного цикла транзакций, техническими приемами для обмана "чужих", если они что то через задний ход пытаются сделать и т.д. - что позволяет провайдер источника. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 13:24 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRosА по моему ты нифига не смыслишь в ужах и ежах (тут не зоопарк все же, а лоскутная автоматизация) Просто странно это всё. Спихнём на то, что ты шаман, и разработка у тебя какая-то шаманская ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 13:26 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
Var79, вот некоторые конфигурируемые вещи Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 13:28 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRos, В дополнение ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 13:36 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRos, Не пробовал посмотреть в сторону ABAC? Чтобы не было вот такого ужаса из галочек. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 14:11 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
hVostt, а что это такое? счеты? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 14:13 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRos, в гугле АВАС - поршневые компрессоры ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 14:14 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
hVosttViPRos, https://en.wikipedia.org/wiki/Attribute-Based_Access_Control ах вот оно что :) те галочки относятся к конкретным элементам (кнопкам и т.д.) - надо создавать данный функционал и кнопку или нет (например кнопку "групповое удаление записей") или к режимам - вообще можно ли редактировать челу что нить а вот все остальное в скрипте ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 15:56 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRosах вот оно что :) те галочки относятся к конкретным элементам (кнопкам и т.д.) - надо создавать данный функционал и кнопку или нет (например кнопку "групповое удаление записей") или к режимам - вообще можно ли редактировать челу что нить а вот все остальное в скрипте Всё равно жестянство какое-то. Я бы постеснялся такое отдать на продакшен, и мне было бы страшно писать мануал к этому. ABAC полностью решает проблему перегруженности интерфейса управления доступом, в том числе к рисованию бесчисленного количества кнопок. Если на каждый чих добавлять разрешение, галочку, это можно рехнуться однажды. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2016, 17:42 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
hVosttViPRosах вот оно что :) те галочки относятся к конкретным элементам (кнопкам и т.д.) - надо создавать данный функционал и кнопку или нет (например кнопку "групповое удаление записей") или к режимам - вообще можно ли редактировать челу что нить а вот все остальное в скрипте Всё равно жестянство какое-то. Я бы постеснялся такое отдать на продакшен, и мне было бы страшно писать мануал к этому. ABAC полностью решает проблему перегруженности интерфейса управления доступом, в том числе к рисованию бесчисленного количества кнопок. Если на каждый чих добавлять разрешение, галочку, это можно рехнуться однажды. Неужели ты думаешь что написать nnое количество правил легче чем ткнуть на галочку - Да, Нет? Правила надо писать тогда, когда невозможно обойтись - Да, Нет. А что бы не ткать каждый раз - есть дефолты, есть клонирование и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2016, 19:17 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
А ты вооще то покажи - как у тебя такие вещи сделаны и сравним. Лучшее познается в сравнении. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2016, 19:18 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
Или не у тебя, а у кого то, ну там в ROR там YII ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2016, 19:19 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRosНеужели ты думаешь что написать nnое количество правил легче чем ткнуть на галочку - Да, Нет? Правила надо писать тогда, когда невозможно обойтись - Да, Нет. А что бы не ткать каждый раз - есть дефолты, есть клонирование и т.д. Я думаю, что написать нужное и определённое количество правил гораздо легче и это проще, чем найти среди сотни тысяч галочек, разбросанных неизвестно как и где, чтобы тыкнуть нужную. И ответить на вопрос: а что вообще можно этому пользователю, а что нельзя в целом по всей системе? И тут же это поправить. Про дефолты и клонирование «чтобы не тыкать каждый раз», это не более чем костыли, на мой взгляд. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2016, 21:33 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRosА ты вооще то покажи - как у тебя такие вещи сделаны и сравним. Лучшее познается в сравнении. Описывается обычным DSL, который переводится на русский вполне прозрачно: Политика: Правила для менеджеров 1. Пользователями группы «Менеджеры»: 1.1. для группы объектов «Объекты доступные менеджерам»: 1.1.1. доступны операции «Все» 1.1.2. не доступна операция «Просмотр истории» и т.д. Сложность состоит в полноценной реализации модуля ABAC для имеющейся схемы данных и бизнес-логики, это действительно вызов для разработчика В текущем проекте у нас ещё в реализации, и даже в недоработанном виде он устраивает всех более чем. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2016, 21:43 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
hVosttViPRosА ты вооще то покажи - как у тебя такие вещи сделаны и сравним. Лучшее познается в сравнении. Описывается обычным DSL, который переводится на русский вполне прозрачно: Политика: Правила для менеджеров 1. Пользователями группы «Менеджеры»: 1.1. для группы объектов «Объекты доступные менеджерам»: 1.1.1. доступны операции «Все» 1.1.2. не доступна операция «Просмотр истории» и т.д. Сложность состоит в полноценной реализации модуля ABAC для имеющейся схемы данных и бизнес-логики, это действительно вызов для разработчика В текущем проекте у нас ещё в реализации, и даже в недоработанном виде он устраивает всех более чем. Хвост, ты кажись даже не думаешь что вообще то критикуешь? "Группа объектов", "операция" , "все", "доступно".... - все это семантические единицы как то ведь должны быть доступны :) контексту менеджера правил? Ты представляешь что это за монстр? Ты, блин, хоть немного подумай. Прежде чем реализовать это (как не странно ABAC) я забраковал много фигни типа Drool и т.д. А если учитывать, что в ВИПРОС нет ничего, кроме метаданных и интерпретатора и данных, то я должен был бы написать целый язык для такого ABAC. Я поступил иначе - встроил C#. А ты не стесняйся - покажи недоработанную. Посмеемся вместе. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2016, 23:48 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRosХвост, ты кажись даже не думаешь что вообще то критикуешь? Являясь разработчиком, я также являюсь и пользователем, поэтому смотрю на задачу как минимум с двух позиций. Часто ещё надо включать позицию нескольких лиц, типа заказчика, внедренца, овнера, постановщика, дизайнера, у каждого из которых есть своё видение. ViPRos"Группа объектов", "операция" , "все", "доступно".... - все это семантические единицы как то ведь должны быть доступны :) контексту менеджера правил? Ты представляешь что это за монстр? Почему монстр? Всё описывается в едином месте. Ты заходишь и описываешь правило доступа. Не надо никуда лазить. Хочешь посмотреть, что может конкретный пользователь, нажимаешь кнопульку и тебе согласно текущим политикам вычисляются абсолютно ВСЕ доступные возможности для пользователя: что он может, что не может, какая кнопка ему показывается, а какая нет в рамках всей системы в целом, без исключений. Ты в своей системе можешь ответить на такой вопрос? Или надо собрать и агрегировать безопасность, раскиданную в виде ошмётков и галочек по всей системе? А это точно всё работает? А ты уверен? Всё-всё? С точки зрения доказательной базы, тебе тут поможет разве что 100% покрытие тестами, да и то не обязательно, что этого хватит. Я же не критиковал, как всё плохо у тебя. Просто спросил, не рассматривал ли ты другую возможность, и определённо сказал какую. ViPRosТы, блин, хоть немного подумай. Прежде чем реализовать это (как не странно ABAC) я забраковал много фигни типа Drool и т.д. А почему забраковал ABAC? ViPRosА если учитывать, что в ВИПРОС нет ничего, кроме метаданных и интерпретатора и данных, то я должен был бы написать целый язык для такого ABAC. Я поступил иначе - встроил C#. Мы используем Lua, не надо писать новый язык, определи термины DSL и используй хоть брейнфак. При чём правило безопасности может быть сколько угодно сложным, а учитывая странности и сложности каждой отдельной предметки, мне нафик не упёрлось программировать каждый отдельный случай упоротой фантазии любого из задействованных в иерархии разработки лиц. Можно было, кстати, и C# использовать, сегодня это вообще не проблема. Но Lua проще для интеграторов, не хотим ещё обучать их сишарпам. ViPRosА ты не стесняйся - покажи недоработанную. Посмеемся вместе. Ничего показывать не буду, политика компании, ни кусков кода, ни скриншотов, мы не делаем публичных приложений, по крайне мере пока. Но я планирую запилить модуль ABAC в open source, по результатам текущих исследований. Это разрешено. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2016, 00:33 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRosА если учитывать, что в ВИПРОС нет ничего, кроме метаданных и интерпретатора и данных Собственно текущая разработка у нас именно такая :) Все бизнес-сущности описываются мета-данными, в SQL хранится только история (операции UPDATE/DELETE отсутствуют напрочь, только SELECT/INSERT). Агрегированные данные в чистом виде в MongoDB, в виде документов (предметка). Бизнес описывается на уровне конечного приложения в виде сервисов, модулей и Lua-скриптов, для которых предусмотрена версионность. В целом не было задачи сделать универсальную вундервафлю, в которой через интерфейс можно состряпать полностью готовое бизнес-приложение, история таких гипер-универсальных вундервафлей всегда и однозначно кончается полным провалом. Другое дело, через специальный интерфейс полностью описать бизнес-модель, а UI написать отдельно на расово любимом стеке технологий в виде конечного приложения на прикладном уровне, сделав необходимые оптимизации там, где это нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2016, 00:42 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
hVosttViPRosА если учитывать, что в ВИПРОС нет ничего, кроме метаданных и интерпретатора и данных Собственно текущая разработка у нас именно такая :) Все бизнес-сущности описываются мета-данными, в SQL хранится только история (операции UPDATE/DELETE отсутствуют напрочь, только SELECT/INSERT). Агрегированные данные в чистом виде в MongoDB, в виде документов (предметка). Бизнес описывается на уровне конечного приложения в виде сервисов, модулей и Lua-скриптов, для которых предусмотрена версионность. В целом не было задачи сделать универсальную вундервафлю, в которой через интерфейс можно состряпать полностью готовое бизнес-приложение, история таких гипер-универсальных вундервафлей всегда и однозначно кончается полным провалом. Другое дело, через специальный интерфейс полностью описать бизнес-модель, а UI написать отдельно на расово любимом стеке технологий в виде конечного приложения на прикладном уровне, сделав необходимые оптимизации там, где это нужно. Ты опять не понимаешь. Вот есть какая та коллекция (ну например тот же список недвижимости). Иванов (в роли какого то козла) может видеть все объекты, в редактировать может только объекты находящиеся в Владимирской области (а то и только те, у которого площадь меньше 40 кв. м.) Что бы это в Lua описать, надо что бы Lua знала все коллекции, все типы ссылок в этой коллекции (так как там нет слов "Владимирская обл" - стоит GUID), самого Иванова, и т.д. Или все это фуфло кому то надо было все время передавать в контекст Lua (так как она нифига не знает), ты представляешь тормоза? Ты понимаешь что указанный мной механизм не только на жамкание кнопочек рассчитан, а и на любой код в любом прикладном методе? Прогер НЕ вычисляет права, не просит разрешения для Иванова - ВИПРОС без него все это делает. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2016, 01:15 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
hVosttСобственно текущая разработка у нас именно такая :) Купите ВИПРОС. Там все уже сделано. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2016, 01:16 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRos, почем опиум для народа? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2016, 02:33 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
hVosttв SQL хранится только история (операции UPDATE/DELETE отсутствуют напрочь, только SELECT/INSERT). Как тогда выглядет удаление строки в " приходной накладной "? Допустим можно сделать INSERT " приходной накладной " и получать приходную накладную которая перекроет старую если запросить типа такого Код: sql 1.
Но как быть с табличной частью, есть 100 строк, надо удалить одну, для этого вставляюем новые 99 строк? Это еффективно? Или если какой то другой способ без update и delete жить? Можно ссылки на почитать об этом? Я так понимаю это как правильно готовить event sourcing and cqrs ? Самое не понятное для меня, это если хочется в одной транзакции изменить что-то и прочитать, это что нужно иметь распределенную транзакцию между БД и "агрегирующем хранилищем" в MongoDB? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2016, 02:44 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRosТы опять не понимаешь. Вот есть какая та коллекция (ну например тот же список недвижимости). Иванов (в роли какого то козла) может видеть все объекты, в редактировать может только объекты находящиеся в Владимирской области (а то и только те, у которого площадь меньше 40 кв. м.) И это отлично описывается политикой. Роли здесь вообще не нужны, если только это не нужно чисто для бизнеса. При чём правило может быть ещё более сложным. Например, Иваном может редактировать объекты в определённой области с определённой площадью и только на период, когда он замещает начальника, но только в високосный год, и только если он сам в своей должности не менее месяца. Любое правило. ViPRosЧто бы это в Lua описать, надо что бы Lua знала все коллекции, все типы ссылок в этой коллекции (так как там нет слов "Владимирская обл" - стоит GUID), самого Иванова, и т.д. Или все это фуфло кому то надо было все время передавать в контекст Lua (так как она нифига не знает), ты представляешь тормоза? Никаких тормозов. Lua ничего не знает, она знает термины. В контекст Lua передаются специальные проски-объекты, которые на лету достают данные из БД или кеша, или транслируют в эффективный запрос. ViPRosТы понимаешь что указанный мной механизм не только на жамкание кнопочек рассчитан, а и на любой код в любом прикладном методе? Прогер НЕ вычисляет права, не просит разрешения для Иванова - ВИПРОС без него все это делает. Управлять этим -- ад. Доступ на объекты, через его тип отстой. Есть например, 100 справочников, доступ на которые нужно управлять группой. Предлагаешь заходить, отфильтровывать эти 100 штук и прожмакивать галочки по 100 раз на каждое разрешение? Или какой-то кривой костыль, типа скопировать права и вставить на выбранные объекты? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2016, 02:45 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
hVostt, какие блин прокси объекты? кто их писать будет? админ по безопасности? а тормоза у вас будут просто ужасными, если конечно ты не просто ляля на эту тему ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2016, 02:55 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRoshVosttСобственно текущая разработка у нас именно такая :) Купите ВИПРОС. Там все уже сделано. То, что там сделано, никому не нужно. В 60% случаев нужна система с полноценным веб-клиентом, в 40% случаев нужно веб + мобильные приложения. В 0% процентов случаев нужен десктоп-клиент. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2016, 02:56 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRosкакие блин прокси объекты? кто их писать будет? админ по безопасности? а тормоза у вас будут просто ужасными, если конечно ты не просто ляля на эту тему Прокси-объекты пишутся один раз. У нас также есть мета-типы, получаешь объекты мета-тип по его имени, интерфейс одинаков. У него есть характеристики. Пожалуйста, у каждого типа свой набор характеристик. В чём проблема-то? С чего быть тормозам? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2016, 02:58 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
В одной организации В ВИПРОС 70 ролей, для которых расписаны права на 750 макротипов (это больше 1000 форм, около 500 таблиц, больше 300 методов и т.д.) Т.е. задача раздачи слонов сложнее чем ваши бизнес задачи, но при отключении этих правил (есть такая возможность в дебаге) в скорость работы не прибавляется, так как все эти правила сразу становятся частью интерпретатора, т.е. нет лишних внешних контекстов Ладно, вот покажешь что нить и тогда обсудим, а так ляля ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2016, 03:00 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
hVosttViPRosкакие блин прокси объекты? кто их писать будет? админ по безопасности? а тормоза у вас будут просто ужасными, если конечно ты не просто ляля на эту тему Прокси-объекты пишутся один раз. У нас также есть мета-типы, получаешь объекты мета-тип по его имени, интерфейс одинаков. У него есть характеристики. Пожалуйста, у каждого типа свой набор характеристик. В чём проблема-то? С чего быть тормозам? Проблема у того, кто минуя свою ж систему безопасности имеет доступ ко всему что бы передать все это какому то Lua :) и заметь, надо что бы этот сраный луа все эти вещи понимал - то бишь работал так же как и основной язык (между прочим есть там лямбды? что нить похожее на Linq?) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2016, 03:03 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRos, Ты можешь вывести все правила для одного юзера человеческим русским языком? Нажал кнопку и увидел, что пользователь вообще может? И почему он может? Провести полную трассировку безопасности? Выполнить набор тестов по доступу, без лазания и тыкания мышкой, чтобы удостовериться, что так оно и есть? Если в обслуживаемой вами организации отсутствует как класс аудит безопасности, то вам очень и очень крупно повезло получается. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2016, 03:06 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
hVostt, могу все это вывести на русском (правда это не сделано), но это будет книга, если включить дефолтные настройки :) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2016, 03:08 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRosПроблема у того, кто минуя свою ж систему безопасности имеет доступ ко всему что бы передать все это какому то Lua :) Ты очень странно рассуждаешь. На кой что-то там передавать? Передаётся интерфейс, который разыменовывает ссылки, никакие объекты реально не передаются. Формируются проверки и условия, никакие данные и никуда вытащить нельзя при этом. ViPRosи заметь, надо что бы этот сраный луа все эти вещи понимал - то бишь работал так же как и основной язык (между прочим есть там лямбды? что нить похожее на Linq?) Лямбд нету, и много чего нету, поэтому Lua и выбран. Сложные запросы формируются через паттерн-матчинг. Ну и другие есть приёмы, чтобы состряпать запрос. На деле запросы делаются к монге, так как там лежат агрегированные данные. Поэтому лепить SQL запросы из Lua ни к чему вообще. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2016, 03:13 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRosмогу все это вывести на русском (правда это не сделано), но это будет книга, если включить дефолтные настройки :) А ответить, почему сможешь? На основе чего пользователю можно то или другое? Мы отвечаем, вот такая-то конкретная политика, сделанная Васей Пупкиным 18 ноября, разрешает Иванову вот это и вот это. Некоторые политики в комментарии содержат информацию на основе чего это разрешение было выдано, а также срок и условия действия политики. И так как по умолчанию ничего нельзя, т.е. всё запрещено кроме того, что явно не разрешено, книги не будет. Ну и ролей нет как класса. Вообще. Никаких ролей. Пользователи, группы пользователей и политики. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2016, 03:16 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
hVosttViPRosмогу все это вывести на русском (правда это не сделано), но это будет книга, если включить дефолтные настройки :) А ответить, почему сможешь? На основе чего пользователю можно то или другое? Мы отвечаем, вот такая-то конкретная политика, сделанная Васей Пупкиным 18 ноября, разрешает Иванову вот это и вот это. Некоторые политики в комментарии содержат информацию на основе чего это разрешение было выдано, а также срок и условия действия политики. И так как по умолчанию ничего нельзя, т.е. всё запрещено кроме того, что явно не разрешено, книги не будет. Ну и ролей нет как класса. Вообще. Никаких ролей. Пользователи, группы пользователей и политики. Кто выдал, когда выдал, с какого по какое и т.д. ты и так блин видел на скрине, а вот почему он это сделал - вопрос к Пушкину Ладно Хвост, ты просто лялякаешь, нет у вас никакой системы Какие то интерфейсы передаем :) о чем ты? зачем Lua интерфесы? иди спи ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2016, 03:22 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRosчто нить похожее на Linq?) LINQ классный, но лямбды, LINQ, замыкания... лучше оградить их от интеграторов, которые будут писать бизнес-логику. Нафик-нафик. Чем проще язык, тем лучше. Мы рассматривали VB.NET, но надо было ещё проще. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2016, 03:23 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRosЛадно Хвост, ты просто лялякаешь, нет у вас никакой системы Мы не делаем Випрос, просто в чём-то очень похоже, не парься ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2016, 03:27 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRos, Кстати, у нас на Lua нижеприведённый из твоего скриншота скрипт был бы описан так: return User.Регион == Objects.Регион.Find({ ["Наименование региона"] = "Владимирская обл."}) или так return User["Регион"] == Objects["Регион"].Find({ ["Наименование региона"] = "Владимирская обл."}) Равнозначно. Вместо русских названий можно использовать псевдонимы, которые пишутся по правилам лексических идентификаторов и код будет ещё проще. ну вот и сравни теперь ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2016, 03:37 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRos, хотя на самом деле ещё проще: return User.Регион["Наименование региона"] == "Владимирская обл." ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2016, 03:40 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
hVostt, ты опять фантазируешь на тему в ВИПРОС указанный код имеет доступ к контексту автоматически, а тебе надо все эти User, Object и т.д. передавать в контекст скрипта Lua и самое главное, тебе надо парсить скрипт Lua, что бы найти, а что ей нужно передавать в контекст каждый раз ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2016, 11:27 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRosв ВИПРОС указанный код имеет доступ к контексту автоматически, а тебе надо все эти User, Object и т.д. передавать в контекст скрипта Lua и самое главное, тебе надо парсить скрипт Lua, что бы найти, а что ей нужно передавать в контекст каждый раз я передаю в Lua готовый чистый глобальный контекст, в котором всегда всё есть. все скрипты компилируются только раз, пока не будут изменены, никто не парсит их каждый раз. в общем, ты бредишь :) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2016, 23:46 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
hVostt, угу - передаешь все, значит там всего то с гулькин нос ладно передавай ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2016, 02:50 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRosугу - передаешь все, значит там всего то с гулькин нос Ты как будто вчера родился. Давай посмотрим на контекст Entity Framework, он позволяет получить данные из любой базы независимо от её размеры, хоть там сотни тысяч таблиц и миллиарды записей, сам контекст при этом ничего не весит по сравнению с размером данных, которые можно получить. Ну и в чём проблема в скрипт передать прокси-объект, который вытягивает данные на лету по запросу? Чтобы избежать большого количества запросов, существует ряд оптимизаций, плюс DSL запросы, кеширование, и т.д. Знать о таком кошмаре, как GetObjectIDByObjectName пользователям вовсе необязательно, как и необходимость применять ToString для сравнения, объекты сравниваются по домену без всякой необходимости знать, как они там устроены, и что там есть какие-то айдишники. Собственно изначально мой комментарий был о том, что судя по скринам, разработка не юзер-френдли, а для сурового красноглазого разработчика. Я бы не рискнул выходить на публичные продажи с этим, если только не подразумевается, что в довесок к покупке следует приобрести консалтинг со стадом специально обученных красноглазиков в десять раз дороже, чем сам продукт. Надеюсь ты правильно поймёшь, что я имею в виду, тут я критикую с точки зрения обычного пользователя, а не разработчика :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2016, 03:31 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
hVostt, здрастье EF сама создает контекст и сама им управляет, это ты ее просишь что-то делать с ее контекстом через ее DSL. А Lua? Конечно все эти - AsEnumerable, GetObjectIDByObjectName - плохо (хотя бы из за того что многобукофф) надо как то упростить все это, но это требует создать свой куцый язык, что нежелательно, так как нет явных конечных границ применения этого языка - потому пока C# в полный рост ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2016, 16:21 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ну а "красноглазиков" сейчас 80 чек (нифига себе, а как нам то жить? раздать всем бесплатно и пойти к мусе в кодеры?) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2016, 16:23 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
А так, если честно, вот уже 3 года появились какие то непонятные начальники (после того как я ушел на удаленку) и не дают мне перейти на > NET 4.0 (типа у всех на заводах стоит XP, хотя вранье все это) и потому я не могу использовать Roslyn. А он мне нужен не только для трансляции правил валидации и доступа хоть на русском, а и для более важной вещи. У меня есть понятие "контракт кода и метаданных". Т.е. если в коде использованы какие то объекты описанные в метаданных, то я слежу что бы эти метаданные эволюционировали так, что бы не повредить рабочий код (или метить код как не рабочий). Вот тут то Roslyn намного продвинут, чем рефлексия сраная. Уж, очень хочется код тоже перевести в метаданные и связать со структурными метаданными, вот тады ВИПРОС бы достиг своей цели и я бы оставил ее в покое по части метаданных и занимался бы управлением процессами. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2016, 16:45 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRosздрастье EF сама создает контекст и сама им управляет, это ты ее просишь что-то делать с ее контекстом через ее DSL. А Lua? Ну Lua это всего лишь язык, можно взять любой другой, хоть тот же C#. Суть не изменится, человеку надо дать простой, удобный и понятный DSL, без подробностей внутренней реализации. Собственно ты и делаешь что-то типа собственного динамического контекста, содержащего термины бизнеса. ViPRosКонечно все эти - AsEnumerable, GetObjectIDByObjectName - плохо (хотя бы из за того что многобукофф) надо как то упростить все это, но это требует создать свой куцый язык, что нежелательно, так как нет явных конечных границ применения этого языка - потому пока C# в полный рост Мы проходили это. Даже LINQ давали в руки. Но выяснилось, что искусственные ограничения минимальным набором терминов и средств DSL существенно сокращают затраты и время, как на обучение, так и на сопровождение. Да, без LINQ, лямбд и других продвинутых языковых средств иногда кода получается больше, но он зато кристально ясен и понятен и не требует квалификации программиста для написания высокоуровневой бизнес-логики. ViPRosну а "красноглазиков" сейчас 80 чек (нифига себе, а как нам то жить? раздать всем бесплатно и пойти к мусе в кодеры?) Ну ты знаешь, можно вообще ничего не автоматизировать, чтобы сохранить работу сотням людей :) Типа, не закупать калькуляторы, чтобы спасти отдел, работающих с деревянными счётами. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2016, 06:33 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRosА так, если честно, вот уже 3 года появились какие то непонятные начальники (после того как я ушел на удаленку) и не дают мне перейти на > NET 4.0 (типа у всех на заводах стоит XP, хотя вранье все это) и потому я не могу использовать Roslyn. А он мне нужен не только для трансляции правил валидации и доступа хоть на русском, а и для более важной вещи. У меня есть понятие "контракт кода и метаданных". Т.е. если в коде использованы какие то объекты описанные в метаданных, то я слежу что бы эти метаданные эволюционировали так, что бы не повредить рабочий код (или метить код как не рабочий). Вот тут то Roslyn намного продвинут, чем рефлексия сраная. Уж, очень хочется код тоже перевести в метаданные и связать со структурными метаданными, вот тады ВИПРОС бы достиг своей цели и я бы оставил ее в покое по части метаданных и занимался бы управлением процессами. Всё это решается полным отказом от десктопа и перехода на веб. Мне почему-то кажется, ты уже думал над этим. Что мешает? Вот, кстати, пример текста валидации, написан человеком, имеющему отношение к программированию, как я к космонавтике: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
Модель бизнес-данных уже тоже давно пишется предметниками. Никто из программистов не создавал эти cooling_type, oil_pump_power и т.д. Совершенно сознательно мы настояли, чтобы использовались англоязычные псевдонимы для терминов, а не полные русские наименования, так как последние имеют тенденцию постоянно видоизменяться, и это не должно нарушать никакую логику. С другой стороны мы разработали динамический интеллисенс и динамический справочник, так что это никому не мешает. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2016, 06:51 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
hVosttViPRosА так, если честно, вот уже 3 года появились какие то непонятные начальники (после того как я ушел на удаленку) и не дают мне перейти на > NET 4.0 (типа у всех на заводах стоит XP, хотя вранье все это) и потому я не могу использовать Roslyn. А он мне нужен не только для трансляции правил валидации и доступа хоть на русском, а и для более важной вещи. У меня есть понятие "контракт кода и метаданных". Т.е. если в коде использованы какие то объекты описанные в метаданных, то я слежу что бы эти метаданные эволюционировали так, что бы не повредить рабочий код (или метить код как не рабочий). Вот тут то Roslyn намного продвинут, чем рефлексия сраная. Уж, очень хочется код тоже перевести в метаданные и связать со структурными метаданными, вот тады ВИПРОС бы достиг своей цели и я бы оставил ее в покое по части метаданных и занимался бы управлением процессами. Всё это решается полным отказом от десктопа и перехода на веб. Мне почему-то кажется, ты уже думал над этим. Что мешает? Вот, кстати, пример текста валидации, написан человеком, имеющему отношение к программированию, как я к космонавтике: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
Модель бизнес-данных уже тоже давно пишется предметниками. Никто из программистов не создавал эти cooling_type, oil_pump_power и т.д. Совершенно сознательно мы настояли, чтобы использовались англоязычные псевдонимы для терминов, а не полные русские наименования, так как последние имеют тенденцию постоянно видоизменяться, и это не должно нарушать никакую логику. С другой стороны мы разработали динамический интеллисенс и динамический справочник, так что это никому не мешает. Сразу видна проблема. Как только кто то изменить все эти "mddc", "dc", ... ничего не будет работать. И это не самое главное - главное фиг найдешь где что не работает, так как код сам по себе верный, а результат - фигушки. Вот где видна выгода от типизации. И это ж про сообщение - надо выводить сообщение из ресурса, а то затрахаешься найти и исправить или локализовать. До всего этого обычно руки не доходят, но потом аукается сильно. Ну. а на модель хотелось бы посмотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2016, 12:30 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRosСразу видна проблема. Как только кто то изменить все эти "mddc", "dc", ... ничего не будет работать. Именно поэтому используются псевдонимы, а не русские наименования, как у тебя. Изменение псевдонима -- административная функция, создать можно, изменить нельзя. При изменении псевдонима объекта человек понимает чем это может грозить, для этого отображаются предупреждение. Плюс мы предпринимаем усилия для автоматического создания графа зависимостей при изменении скрипта, который полностью устранит проблему. ViPRosВот где видна выгода от типизации. И это ж про сообщение - надо выводить сообщение из ресурса, а то затрахаешься найти и исправить или локализовать. Локлизация есть для интерфейса, полноценная ресурсная, это у нас стандарт, никто строки в коде не пишет. Для бизнес-сообщений сделали хранилище, но им никто не пользуется. Именно такого решения оказывается достаточно. Но сама возможность есть. ViPRosДо всего этого обычно руки не доходят, но потом аукается сильно. Честно говоря там настолько специфичные сообщения, что они редко когда используются более чем в одном месте, да и никто не будет следовать этой культуре. В общем, для бизнес-валидации, не страшно. А вот для валидации на инфо-типах у нас всё строже :) ViPRosНу. а на модель хотелось бы посмотреть. Примерно так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Модель представляет собой объект типа LuaProxyObjectBase, его поведение и что он представляет зависит от текущего контекста исполнения. Т.е. там где ты в Lua видишь обращение через точку, на самом деле вызывается object[name]. Ну и там много всякой обвязки, кеш, безопасность, фэктори. Но по сути вот так из скрипта получают доступ к модели. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2016, 13:25 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
hVosttМодель представляет собой объект типа LuaProxyObjectBase, его поведение и что он представляет зависит от текущего контекста исполнения. Т.е. там где ты в Lua видишь обращение через точку, на самом деле вызывается object[name]. Ну и там много всякой обвязки, кеш, безопасность, фэктори. Но по сути вот так из скрипта получают доступ к модели. Не как модель передавать в контекст Луа, а саму модель имел ввиду, которую "пишут предметники". ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2016, 13:33 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRosНе как модель передавать в контекст Луа, а саму модель имел ввиду, которую "пишут предметники". Модель представляет собой два корневых типа объекта: справочники и документы. Справочники это объекты физического мира (иерархия подразделений, здания, объекты, должности, автомобили, что угодно, что можно охарактеризовать как сущность). Документы это факты. На текущий момент заведено более 500 типов справочников и более 300 типов документов. Характеристики описываются иерархией инфо-типов, их чуть больше 200. Всё это наколбасили предметники, не имеющие отношения к программированию. Я как представлю, сколько понадобилось бы человеко-часов и мудизма, чтобы запрограммировать эту систему классическим способом через классы-таблицы, мне становится дурно. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2016, 15:24 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
hVostt, ну вот, когда я об этом говорил лет этак 10 тому назад все фыркали предмет должны автоматизировать предметники а наше дело автоматизировать программирование :) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2016, 18:06 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRoshVostt, ну вот, когда я об этом говорил лет этак 10 тому назад все фыркали предмет должны автоматизировать предметники а наше дело автоматизировать программирование :) Шаришь! Фыркали, потому что либо не понимали, что так можно сделать, либо ещё банальней -- боялись, что лишатся постоянной оплачиваемой работы. Я бы скзаал проще. Наше дело -- дать мощный инструмент, а не заниматься тем, с чем может справится даже обезьяна до потери пульса. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2016, 19:30 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRos, Кстати, а я хотел предложить своим купить ВИПРОС, чтобы подвергнуть его препарации Но у вас на сайте, ни цен, ни демо-версии, ни урезанного дистриба. В общем, понял, что никто заморачиваться не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2016, 19:39 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
hVosttViPRos, Кстати, а я хотел предложить своим купить ВИПРОС, чтобы подвергнуть его препарации Но у вас на сайте, ни цен, ни демо-версии, ни урезанного дистриба. В общем, понял, что никто заморачиваться не будет. Изначально было принято решение, что ВИПРОС будет внутренним продуктом. Я всегда был против этого. Всегда рвался раздать бесплатно, что бы народ тестировал, и предъявлял требования. Просто наша фирма не заинтересована в деньгах, которых можно было бы заработать через продажи ВИПРОС. А вот прикладные вещи - пожалуйста. Я бы на вашем месте купил ВИП.Производство (а ВИПРОС бы подъехала в придачу :). ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2016, 20:40 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRosЯ бы на вашем месте купил ВИП.Производство (а ВИПРОС бы подъехала в придачу :). А есть фиксированная цена продукта? Ну или разные лицензии? Или всё зависит от кучи факторов? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2016, 08:39 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRosПросто наша фирма не заинтересована в деньгах, которых можно было бы заработать через продажи ВИПРОС. Дык склепай свою версию и начни продавать, не один конечно. За это время продукт мог бы уже нехило развиться при наличии самых разных инсталляций. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2016, 08:41 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
hVostt, Думаю об этом. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2016, 15:00 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
hVosttViPRosЯ бы на вашем месте купил ВИП.Производство (а ВИПРОС бы подъехала в придачу :). А есть фиксированная цена продукта? Ну или разные лицензии? Или всё зависит от кучи факторов? Когда то было, сейчас по моему уже нет никакой политики. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2016, 15:02 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
ViPRoshVostt, Думаю об этом. Если надумаешь, учти, что сегодня миру нужен только веб (ну и мобилки), десктопы не выдерживают конкуренции для энтерпрайз приложений. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2016, 16:27 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
hVosttViPRoshVostt, Думаю об этом. Если надумаешь, учти, что сегодня миру нужен только веб (ну и мобилки), десктопы не выдерживают конкуренции для энтерпрайз приложений. Знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2016, 18:29 |
|
c# параллелизм в EntityFramework
|
|||
---|---|---|---|
#18+
NechtoЯ то думал что можно использовать какой-то стандартный набор инструментов для реализации этой задачи. Можно. Правильно организовать работу пользователей, что бы они не занимались редактированием одних и тех же данных одновременно ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2016, 19:59 |
|
|
start [/forum/topic.php?all=1&fid=17&tid=1349337]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
129ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
110ms |
get tp. blocked users: |
2ms |
others: | 234ms |
total: | 528ms |
0 / 0 |