Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Дайте оценку классу доступа к данным
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! У меня возникла необходимость выбора способа доступа к данным в новом проекте - web-приложении. Пока что вопрос стоит так: какую(или какой) ORM использовать в приложении? Но если честно, имея опыт работы с двумя ORM-системами, у меня не очень лежит душа их использовать. У меня есть несколько успешно-завершенных проектов (помимо неуспешных) в которых доступ к данным осуществляется через стандартные .Net-овские классы (SqlCommand). Соответственно есть класс доступа к данным и класс вокруг него с бизнес-логикой. Я бы хотел представить класс доступа к данным на всеобщее обозрение, для того чтобы собрать критические замечания и модифицировать его. Я знаю что этот код должно быть стыдно показывать. Я знаю что будет много "вони", и вполне к этому готов. Мне не дает покоя что в завершенных проектах не возникает никаких проблем на этом уровне и соответственно мой подход к организации работы с БД имеет право на жизнь. Пожалуйста, проанализируйте и дайте совет что можно изменить: Код: c# 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. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 15:31 |
|
||
|
Дайте оценку классу доступа к данным
|
|||
|---|---|---|---|
|
#18+
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Сразу в топку, т.к. работает только с провайдером SQL Server-а. Почитайте про DbProviderFactory и пространство имён System.Data.Common. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 15:40 |
|
||
|
Дайте оценку классу доступа к данным
|
|||
|---|---|---|---|
|
#18+
SemyglassПока что вопрос стоит так: какую(или какой) ORM использовать в приложении?Простите, а как Object-relational mapping коррелирует с тем, что Вы используете DataSet-ы и DataTable-ы? Вы табличные данные в БД отображаете на табличные данные в памяти, тогда как ORM отображает первое на бизнес-объекты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 15:45 |
|
||
|
Дайте оценку классу доступа к данным
|
|||
|---|---|---|---|
|
#18+
SemyglassПожалуйста, проанализируйте Semyglassи дайте совет что можно изменить: Поискать готовые обертки, если они нужны вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 16:46 |
|
||
|
Дайте оценку классу доступа к данным
|
|||
|---|---|---|---|
|
#18+
skyANASemyglassПока что вопрос стоит так: какую(или какой) ORM использовать в приложении?Простите, а как Object-relational mapping коррелирует с тем, что Вы используете DataSet-ы и DataTable-ы? Вы табличные данные в БД отображаете на табличные данные в памяти, тогда как ORM отображает первое на бизнес-объекты. Но ведь мне ничего не мешает использовать бизнес-объекты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 16:59 |
|
||
|
Дайте оценку классу доступа к данным
|
|||
|---|---|---|---|
|
#18+
SemyglassskyANAпропущено... Простите, а как Object-relational mapping коррелирует с тем, что Вы используете DataSet-ы и DataTable-ы? Вы табличные данные в БД отображаете на табличные данные в памяти, тогда как ORM отображает первое на бизнес-объекты. Но ведь мне ничего не мешает использовать бизнес-объекты.Покажите как? Фактически Ваш класс не является классом доступа к данным в смысле понятия Data access layer . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 17:03 |
|
||
|
Дайте оценку классу доступа к данным
|
|||
|---|---|---|---|
|
#18+
skyANASemyglassпропущено... Но ведь мне ничего не мешает использовать бизнес-объекты.Покажите как? Фактически Ваш класс не является классом доступа к данным в смысле понятия Data access layer . Как-то так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Не сложно сделать класс с бизнес-логикой в котором все это будет реализовано. Или я неправильно понимаю что Вы подразумеваете под бизнес-объектом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 18:34 |
|
||
|
Дайте оценку классу доступа к данным
|
|||
|---|---|---|---|
|
#18+
SemyglassskyANAпропущено... Покажите как? Фактически Ваш класс не является классом доступа к данным в смысле понятия Data access layer . Как-то так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Не сложно сделать класс с бизнес-логикой в котором все это будет реализовано. Или я неправильно понимаю что Вы подразумеваете под бизнес-объектом.То, что Вы изобразили, как раз и называется ORM (Object-relational mapping). Только через одно место. К чему Вы упомянули тут бизнес-логику? Бизнес-логики тут нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 18:55 |
|
||
|
Дайте оценку классу доступа к данным
|
|||
|---|---|---|---|
|
#18+
skyANASemyglassпропущено... Как-то так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Не сложно сделать класс с бизнес-логикой в котором все это будет реализовано. Или я неправильно понимаю что Вы подразумеваете под бизнес-объектом.То, что Вы изобразили, как раз и называется ORM (Object-relational mapping). Только через одно место. К чему Вы упомянули тут бизнес-логику? Бизнес-логики тут нет. Ну так я и говорю что класс с бизнес-логикой не сложно будет сделать. Суть вопроса в другом. Просто каждый раз когда мне приходится кому-то показать фрагмент этого кода, я наблюдаю фырканье и усмешки, но никогда не слышал и не видел объективной критики, что именно является узким местом и где кроется потенциальная опасность для системы использующей данный класс в качестве прослойки между БД и логикой. Я решил создать этот пост чтобы для себя определить можно ли его использовать в дальнейшем или лучше изучить очередную ORM. Я и сам знаю что он выглядит страшно и вполне кто-то может назвать это говно-кодом, но если он работает и хорошо выполняет все свои функции, то имеет право на существование. Кроме того именно в таком виде он работает на самом нагруженном моем проекте - это сайт на котором за сутки происходит более миллиона операций с БД (очень сложно точно посчитать). Сайт живет и никаких проблем с технической стороны не испытывает. Я был бы очень признателен, если мне указали что вот так делать нельзя потому что может случиться вот то, или вот это... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 19:09 |
|
||
|
Дайте оценку классу доступа к данным
|
|||
|---|---|---|---|
|
#18+
Semyglass, критику чего Вы хотите услышать? Вы пока не перечислили те функции, какие должен решать код, и другие требования. Это не ORM, это не DAL, это тупо обёртка над наиболее частыми операциями, возникающими при работе конкретно с SQL Server, в Ваших проектах. Если Вам понадобиться представить данные в объектном виде, или брать их из другой СУБД, или вруг не из СУБД, то код на свалку. Также код можно ускорить, тупо заменив DataAdapter на DataReader, потому как первый юзает последний в методе Fill (уже медленне) + накладные расходы на создание и заполнение DataTable. Ради любопытсва можете профайлером поисследовать сколько внутри метода Fill уходит на fetch данных из БД, а сколько на остальные операции. Фраза "за сутки происходит более миллиона операций с БД" ни о чём не говорит. Миллион операций в сутки - это 11 с половиной операций в секунду. 10 пользователей зашли и прочитали данные, один что-то записал. Так себе нагрузка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 19:36 |
|
||
|
Дайте оценку классу доступа к данным
|
|||
|---|---|---|---|
|
#18+
А учитывая то, что данные раскиданы по нескольким таблицам, и отображение одной страницы - это несколько операций чтения, можно предположить, что меньше одного пользователя в секунду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 19:42 |
|
||
|
Дайте оценку классу доступа к данным
|
|||
|---|---|---|---|
|
#18+
skyANA, спасибо, поковыряю DataReader. В случае с сайтом - как раз зачастую это операции обновления\вставки, для поддержания актуальности данных. Но согласен что миллион операций в сутки - это не так уж много, просто более нагруженного проекта пока не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2014, 10:11 |
|
||
|
Дайте оценку классу доступа к данным
|
|||
|---|---|---|---|
|
#18+
Semyglass, а как вы будете делать операции разбиения выборки на страницы ? совместную операцию - получение третьей страницы выборки и получения общего количества записей в выборке? ваше изобретение неподдерживаемо на 100%. развивать его другим человеком нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 23:05 |
|
||
|
Дайте оценку классу доступа к данным
|
|||
|---|---|---|---|
|
#18+
monstrU, Мне никогда не приходилось делать совместные операции получения кол-ва записей и одной страницы из выборки. Это делается двумя запросами. Как Вы себе это представляете? Должен быть метод который будет возвращать одновременно int и DataTable? Я вполне обходился одним Count и функцией получения страницы (она есть в моем классе). Мне кажется так проще и надежнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2014, 13:26 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=38562907&tid=1357669]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
25ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 308ms |

| 0 / 0 |
