Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Подскажите паттерн
|
|||
|---|---|---|---|
|
#18+
Есть скрипт на Perl, который осуществляет перенос данных из одной информационной системы в другую. Структура баз данных в этих информационных системах разная, но общие моменты есть. Поэтому я хочу написать универсальную процедуру, которая будет осуществлять перенос данных. На входе структура будет принимать три параметра: источник данных (массив хешей или ссылка на DBI::sth), схема переноса (хеш), приемник данных. Схема переноса — это хеш, ключи которого будут полями приемника, а значения могут быть: 1. Скаляром (константой), которая переносится один в один. 2. Ссылкой на поле источника данных, значение которого переносится один в один. 3. Анонимной процедурой, в которую передается текущая запись источника и которая используется для произвольной трансформации. Вызов этой функции и сама функция будут выглядеть примерно так: Код: php 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. Но тут есть одна сложность. Описанный код осуществляет получение данных для текущей строки приемника, на месте многоточий будет код, осуществляющий перенос этих данных в БД. Мне нужно переносить несколько десятков сущностей, у разных сущностей используются разные PK и констрейны. Я бы не хотел делать мега-процедуру, которая бы изучала приемник, определяла в нем PK и уникальные индексы, дополнительные констрейны и самостоятельно осуществляла перенос данных в приемник в зависимости от десятка критериев (добавить/обновить/удалить/пропустить запись, проверить корректность данных в полях и заполнение обязательных полей и т.п.). Всю эту проверку я бы хотел оставить в вызываемой процедуре. Тогда для каждой сущности я буду использовать свою процедуру, которая будет подготавливать данные с помощью datasync, а различные проверки будут в коде этой процедуры. В принципе, я бы использовать callback-функцию (передавать в datasync еще один аргумент с анонимной функцией, которая будет вызываться вместо многоточий), но у такой архитектуры есть несколько неудобств. Я также мог бы в datasync сохранять подготовленные данные в хеш, возвращать его в вызываемую процедуру, которая уже и будет делать проверки и переносить данные в приемник. Но данных может быть много, они и так занимают память в $rs, а тут будет еще один примерно такой же по размеру хеш. Видимо нужно использовать другую архитектуру, но на ум ничего не приходит. Не посоветуете, как еще можно обособить код универсальной обработки данных, который выполняется внутри цикла? ________________________ Мы смотрим с оптимизмом... ...в оптический прицел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2014, 10:16 |
|
||
|
Подскажите паттерн
|
|||
|---|---|---|---|
|
#18+
Пока дошел до такого: Код: php 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. Все контекстные проверки в вызывающей процедуре. Может кому пригодится. А может кто посоветует, как улучшить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2014, 12:11 |
|
||
|
Подскажите паттерн
|
|||
|---|---|---|---|
|
#18+
Alibek B., никому не пригодится. несмотря на имеющиеся общие моменты в нескольких системах, быстрее и качественнее написать отдельный 'переносчик' для каждой, пользуясь универсальным инструментом под названием Perl и не изнывая от фрустрации от 'рутинности' повторяющихся процедур. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2014, 15:19 |
|
||
|
|

start [/forum/topic.php?fid=23&fpage=87&tid=1462792]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
30ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 319ms |

| 0 / 0 |
