|
|
|
Базовый класс для бизнес-сущностей
|
|||
|---|---|---|---|
|
#18+
Коллеги, использовал в своих программах бизнес-сущности, типа Код: c# 1. 2. 3. 4. В итоге поняв, что это ни что иное как DataSet, сделал: Код: pascal 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. Вопрос - как мне в моем коде применить Dictionary? Я с ними не сильно знаком, по смыслу можно объявив наверное Код: c# 1. Например как с помощью них реализовать поиск по имени? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 19:25 |
|
||
|
Базовый класс для бизнес-сущностей
|
|||
|---|---|---|---|
|
#18+
Какую задачу вы пытаетесь решить? Чем не устроил вариант wsnet Код: pascal 1. 2. 3. 4. ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 19:34 |
|
||
|
Базовый класс для бизнес-сущностей
|
|||
|---|---|---|---|
|
#18+
wsnetНапример как с помощью них реализовать поиск по имени? contains key ? А вообще жесть, конечно. Бизнес-сущности... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 19:39 |
|
||
|
Базовый класс для бизнес-сущностей
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Да слишком много этих классов, это же неудобно каждый раз описывать ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 19:53 |
|
||
|
Базовый класс для бизнес-сущностей
|
|||
|---|---|---|---|
|
#18+
jmp_original, На примере моем как-то можете показать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 19:54 |
|
||
|
Базовый класс для бизнес-сущностей
|
|||
|---|---|---|---|
|
#18+
wsnetДа слишком много этих классов, это же неудобно каждый раз описывать ... Во-первых, их не больше, чем бизнес-сущностей. Во-вторых, каждый раз описывать и не надо, есть наследование. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 19:56 |
|
||
|
Базовый класс для бизнес-сущностей
|
|||
|---|---|---|---|
|
#18+
jmp_original, А почему не TryGetValue? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 19:57 |
|
||
|
Базовый класс для бизнес-сущностей
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Я их не наследую, слишком они разные эти сущности, общего ничего нет у них, как быть тогда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 19:59 |
|
||
|
Базовый класс для бизнес-сущностей
|
|||
|---|---|---|---|
|
#18+
wsnetЯ их не наследую, слишком они разные эти сущности, общего ничего нет у них, как быть тогда? Тогда надо проводить анализ глубже, ибо общего у них как минимум ID. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 20:04 |
|
||
|
Базовый класс для бизнес-сущностей
|
|||
|---|---|---|---|
|
#18+
Это называется шаблоном Active Record . Если внутри будет буфер с полным списком объектов (например, по ID), то остальной поиск делается через обычные циклы for item in itemsList. И возвращает обычный список со ссылками TList<Object> (Т.е. меняя их меняется и "база"). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 20:20 |
|
||
|
Базовый класс для бизнес-сущностей
|
|||
|---|---|---|---|
|
#18+
wsnetjmp_original, А почему не TryGetValue? Не знаю. У тебя надо спросить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 20:23 |
|
||
|
Базовый класс для бизнес-сущностей
|
|||
|---|---|---|---|
|
#18+
JaDi, можно на моем примере показать ActiveRecord ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 20:24 |
|
||
|
Базовый класс для бизнес-сущностей
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Но неужели мой подход плох ? Он не имеет право на жизнь ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 20:26 |
|
||
|
Базовый класс для бизнес-сущностей
|
|||
|---|---|---|---|
|
#18+
JaDi, скажи в моем коде чтобы ты дополнил, полагаю может какие-то проверки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 20:28 |
|
||
|
Базовый класс для бизнес-сущностей
|
|||
|---|---|---|---|
|
#18+
wsnet, варианты чего? Если нужен поиск, то делается банальный цикл по всем записям с проверкой по нужному полю. Если нужны данные по ID, то через TryGetValue (если там где-то внутри будет храниться Dictionary). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 20:36 |
|
||
|
Базовый класс для бизнес-сущностей
|
|||
|---|---|---|---|
|
#18+
JaDi, Тот же Dictionary сделать полем моего класса TBase ? А где его создавать в конструкторе TBase? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 20:47 |
|
||
|
Базовый класс для бизнес-сущностей
|
|||
|---|---|---|---|
|
#18+
wsnetНо неужели мой подход плох ? Он не имеет право на жизнь ? Имеет, почему нет. Забавное извращение. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 21:04 |
|
||
|
Базовый класс для бизнес-сущностей
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Почему извращение ?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 21:17 |
|
||
|
Базовый класс для бизнес-сущностей
|
|||
|---|---|---|---|
|
#18+
wsnet, для чего он нужен? Обычно, когда что-то сложное -- весь код для работы с базой вообще в отдельном объекте/объектах хранят, чтобы не перемешивать бизнес-логику с логикой работы с базой. Т.е. типа TPerson и TPersonsTable(TBaseTable). И вот уже в TBaseTable можно и Dictionary применить для подгрузки туда данных из базы, и всё остальное типа обновления/удаления (TBaseTable.Update(ARecord: TBase)). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 21:23 |
|
||
|
Базовый класс для бизнес-сущностей
|
|||
|---|---|---|---|
|
#18+
JaDi, я в этом подходе не очень понимаю, как реализовать механизм блокировки записей, ведь если мы загрузим весь набор в класс personstable, а затем по ID подгрузим из этого списка нужную запись, то нет никакой вероятности что на момент получения записи по ID список personstable не измениться и мы получим грязную запись ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 21:29 |
|
||
|
Базовый класс для бизнес-сущностей
|
|||
|---|---|---|---|
|
#18+
wsnetJaDi, я в этом подходе не очень понимаю, как реализовать механизм блокировки записей, ведь если мы загрузим весь набор в класс personstable, а затем по ID подгрузим из этого списка нужную запись, то нет никакой вероятности что на момент получения записи по ID список personstable не измениться и мы получим грязную запись ? Используй механизм транзакций. Запусти транзакцию с уровнем изоляции "repeatable read", и в ее контексте формируй клиентский набор данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 21:36 |
|
||
|
Базовый класс для бизнес-сущностей
|
|||
|---|---|---|---|
|
#18+
wsnetПочему извращение ?) 1) Потому что TDataset уже есть и твоему велосипеду ещё до него расти и расти; 2) В процессе этого роста ты откроешь для себя забавные возможности автоформирования UI (которые в TDataset тоже уже есть); 3) Кодировать придётся на порядок больше, чем в тривиальном первом способе. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 21:44 |
|
||
|
Базовый класс для бизнес-сущностей
|
|||
|---|---|---|---|
|
#18+
wsnetJaDi, я в этом подходе не очень понимаю, как реализовать механизм блокировки записей, ведь если мы загрузим весь набор в класс personstable, а затем по ID подгрузим из этого списка нужную запись, то нет никакой вероятности что на момент получения записи по ID список personstable не измениться и мы получим грязную запись ? Списки на стороне клиента. Это НЕ реальные данные с базой, а фактически их слепок на какой-то момент времени (чисто для удобства, чтобы по каждому чиху не лазить в базу). Контроль целостности реализуется миллионом способов, начиная от базы данных (блочить таблицу или запись в самой базе при начале редактирования, такое позволяет тот же оракл) и заканчивая самим приложением (хранить сведения о последних изменениях в базе, после их обновлять на клиенте, если что-то меняется). Например, мне нравится такое решение: - в базе у объектов есть время последнего изменения; - при начале редактирования все данные по объекту подгружаются на форму; - после чего пользователь их изменяет; - при сохранении происходит проверка текущих данных в базе; - если их дата изменилась, то пользователь видит предупреждение об изменении и предложении подумать, действительно ли он хочет переписать их своими, тем самым затерев чужие изменения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 21:54 |
|
||
|
Базовый класс для бизнес-сущностей
|
|||
|---|---|---|---|
|
#18+
Котовасия, а Read Commited не хватит ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 21:59 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39703156&tid=2040386]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
179ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 468ms |

| 0 / 0 |
