|
Object-object mapping
|
|||
---|---|---|---|
#18+
Есть ли ещё библиотечки наподобие AutoMapper? Мне конкретно надо конвертировать типизированный датасет в POCO и обратно. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2010, 14:59 |
|
Object-object mapping
|
|||
---|---|---|---|
#18+
А если Linq to DataSet заюзать? Или я чего ен понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2010, 15:15 |
|
Object-object mapping
|
|||
---|---|---|---|
#18+
class A { string a; } class MySet: DataSet { ATable AObjects; ... ну и так далее ... } и как? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2010, 15:25 |
|
Object-object mapping
|
|||
---|---|---|---|
#18+
maXmoЕсть ли ещё библиотечки наподобие AutoMapper? Мне конкретно надо конвертировать типизированный датасет в POCO и обратно. Мне понравился вот этот (идеей, лично не юзал). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2010, 18:36 |
|
Object-object mapping
|
|||
---|---|---|---|
#18+
qu-quМне понравился вот этот (идеей, лично не юзал). А какая там идея? Банальный конверт. На нём далеко не уедешь, если и делать что-то универсальное, что, наверное, на аттрибутах destination классов. Ну а простенькие конверты мало кому интересны. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2010, 10:09 |
|
Object-object mapping
|
|||
---|---|---|---|
#18+
МСУqu-quМне понравился вот этот (идеей, лично не юзал). А какая там идея? Банальный конверт. На нём далеко не уедешь, если и делать что-то универсальное, что, наверное, на аттрибутах destination классов. Ну а простенькие конверты мало кому интересны. Там "конверт" только для встроенных типов CLR, а для юзерских классов, массивов, IDictionary<string,object> и пр. IDataRecord-ов - там "честная" автогенерация лямбд-делегатов по метаданным из Reflection + если свойства не резолвятся напрямую по именам (включая ссылочные иерархии типа: "source1.Client.ID" -> "destination1.ClientID"), то можно добавить свою кастомную лямбду, которая будет доопределять нестыковки (но не конвертить напрямую, а дописываться/встраиваться к уже сгенеренной "основной" лямбде). Ну и, понятное дело, все кешируется на статическом уровне (кажися?), т.е. достаточно 1 раз использовать маппер между определенными типами и оно потом в остальных вызовах будет просто "летать"... (разница в скорости вызова прямого метода и скомпиленной лямбды - 2-3ms). ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2010, 14:13 |
|
Object-object mapping
|
|||
---|---|---|---|
#18+
qu-qu, какая нафиг честная автогенерация лямбд. На простой задаче DataTable => Class нужно самому писать лямбду: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Вот и спрашивается, на кой мне такая "честность", ведь на описание маппера мне приходится делать то же приведение, которое я бы и так делал. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2010, 15:11 |
|
Object-object mapping
|
|||
---|---|---|---|
#18+
Сцуко, даже DataRowAdapter не хавает: DataRowAdapter Код: plaintext 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. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147.
Ну и на кой хер (с) нам такие гавномапперы? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2010, 15:32 |
|
Object-object mapping
|
|||
---|---|---|---|
#18+
МСУqu-qu, какая нафиг честная автогенерация лямбд. На простой задаче DataTable => Class нужно самому писать лямбду... Значит, чувак поленился реализовать сценарии работы с данными (IDictionary, IDataRecord и пр. получается - были моими фантазиями). (но я же честно написал - сам не юзал, но идея - понравилась, потому, наверное, и фантазия разыгралась). Если так уж надо "DataTable => Class" - почему бы не записаться в "контрибьюторы" проекта и дописать недостающее самому? (на том и стоит OSS). З.Ы. или стырить по-тихому идею и добавить в свою реализацию все, что угодно... (или нужно на данный момент). ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2010, 15:41 |
|
Object-object mapping
|
|||
---|---|---|---|
#18+
МСУСцуко, даже DataRowAdapter не хавает: + DataRowAdapter Ну и на кой хер (с) нам такие гавномапперы? Это ты ему пытался свой адаптер скормить? Или где-то в недрах его кода нашел "болванку" для IDataRecord? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2010, 15:43 |
|
Object-object mapping
|
|||
---|---|---|---|
#18+
qu-quфантазия разыгралась Херасе у Вас фантазии: - "честная" автогенерация лямбд-делегатов - по метаданным из Reflection типа идёт работа - все кешируется на статическом уровне - разница в скорости вызова прямого метода и скомпиленной лямбды - 2-3ms Тут либо плюмбум либо люминий. P.S. qu-quесли свойства не резолвятся напрямую по именам (включая ссылочные иерархии типа: "source1.Client.ID" -> "destination1.ClientID"), то можно добавить свою кастомную лямбду Грошь цена мапперу, который не предоставляет этот функционал :) qu-quпочему бы не записаться в "контрибьюторы" проекта и дописать недостающее самому? Неее, в топку. Пусть пацанва сама свои грабли собирает. qu-quЗ.Ы. или стырить по-тихому идею и добавить в свою реализацию все, что угодно... (или нужно на данный момент). Это всегда можно ) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2010, 15:47 |
|
Object-object mapping
|
|||
---|---|---|---|
#18+
qu-quЭто ты ему пытался свой адаптер скормить? Или где-то в недрах его кода нашел "болванку" для IDataRecord? Ну как бы да, пытался адаптер скормить, чтоб IDataRecord кушал. Можно и расширение енумерабловое накидать: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
... но всё-равно нихрена не умеет работать. Болванка не недровая, простой глупый адаптер. Поэтому, смело пакуем маппер в корзину с прокисшими помидорами. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2010, 15:50 |
|
Object-object mapping
|
|||
---|---|---|---|
#18+
А в случае автомаппера всё выглядит просто: Код: plaintext 1. 2.
Human Код: plaintext 1. 2. 3. 4.
Ну не красота-ли, qu-qu? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2010, 16:03 |
|
Object-object mapping
|
|||
---|---|---|---|
#18+
МСУА в случае автомаппера всё выглядит просто: Код: plaintext 1. 2.
+ Human Код: plaintext 1. 2. 3. 4.
Ну не красота-ли, qu-qu? Красота-то красота (кто бы спорил), только я бы все-таки "разорился" на 1 extension method: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
З.Ы. мне близки также идеи Fluent Interface... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2010, 16:12 |
|
Object-object mapping
|
|||
---|---|---|---|
#18+
МСУ, Кстати, насчет этого: Код: plaintext 1. 2.
(на одно действие по маппингу - 2 действия по подготовке маппера, по-моему, многовато). ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2010, 16:15 |
|
Object-object mapping
|
|||
---|---|---|---|
#18+
qu-qu, ну Reset можно не юзать (это так, кеши подрихтовать), а на счёт CreateMap => Map согласен, криво сделано. Но это всё касается IDataReader/IDataRecord. Для "обычных" телодвижений подойдёт просто Map. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2010, 16:43 |
|
Object-object mapping
|
|||
---|---|---|---|
#18+
Зацените, написал маппер. Сторонние либы использовать не желательно в проектах. Работает на Runtime.CompilerServices, достаточно шустр. От лямбды отказался, не хотелось промежуточные бизнес интерфесы плодить. Может кому понадобится, а еще лучше, если кто-то свою лепту внесёт :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Proxi Код: plaintext 1. 2. 3. 4. 5. 6.
DataMapper Код: plaintext 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2011, 09:16 |
|
Object-object mapping
|
|||
---|---|---|---|
#18+
Грят, мапер через рефлексию - это не айс. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2011, 18:59 |
|
Object-object mapping
|
|||
---|---|---|---|
#18+
Ах, да, я остановился на EmitMappere. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2011, 19:00 |
|
Object-object mapping
|
|||
---|---|---|---|
#18+
maXmoГрят, мапер через рефлексию - это не айс. Ну там не только рефлекшен, есть и Expression ;) maXmoАх, да, я остановился на EmitMappere. Ага, читал про его скорость тут . P.S. Сторонние либы не юзаем в проектах, поэтому пришлось своё простенькое написать для текущих задач. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2011, 21:28 |
|
|
start [/forum/topic.php?fid=17&gotonew=1&tid=1350553]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
66ms |
get topic data: |
13ms |
get first new msg: |
9ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 319ms |
total: | 502ms |
0 / 0 |