tag:blogger.com,1999:blog-458002489272917533.post4830361849792219..comments2024-02-14T14:07:38.890+05:00Comments on Блог Александра Бындю: Совершенный код. Разбор выпуска №1Alexander Byndyuhttp://www.blogger.com/profile/14185486842573956085noreply@blogger.comBlogger23125tag:blogger.com,1999:blog-458002489272917533.post-65405758412407343082010-06-07T12:16:38.142+06:002010-06-07T12:16:38.142+06:00Linq2SqlLinq2SqlAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-47889442503559023002010-06-07T08:17:42.141+06:002010-06-07T08:17:42.141+06:00@moon-pilgrim
Для какой ORM будем реализовывать?@moon-pilgrim<br />Для какой ORM будем реализовывать?Alexander Byndyuhttps://www.blogger.com/profile/14185486842573956085noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-10194732963120218592010-06-05T15:29:26.037+06:002010-06-05T15:29:26.037+06:00можно привести реализацию ITransactionFactory и IT...можно привести реализацию ITransactionFactory и ITransactionAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-78066788316261432992010-05-24T20:28:49.135+06:002010-05-24T20:28:49.135+06:00@s_tristan
Очень интересный код, есть полезные иде...@s_tristan<br />Очень интересный код, есть полезные идеи. Для начала понравилась реализация TransactionAttribute для методов контроллера. Спасибо еще раз.Alexander Byndyuhttps://www.blogger.com/profile/14185486842573956085noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-80610572284026056782010-05-24T20:05:56.661+06:002010-05-24T20:05:56.661+06:00@hazzik
Можно и так. Тоже вариант.
Я думаю, что в...@hazzik<br />Можно и так. Тоже вариант.<br /><br />Я думаю, что все эти варианты имеют право на жизнь. Пока не вижу явных преимуществ одного перед другими.<br /><br />@hazzik и @Раиль, если видите, то можете сравнить? Плюсы и минусы подходов.Alexander Byndyuhttps://www.blogger.com/profile/14185486842573956085noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-63412400450409227252010-05-24T20:02:52.556+06:002010-05-24T20:02:52.556+06:00@Александр Бындю
>Т.е. после завершения все изм...@Александр Бындю<br />>Т.е. после завершения все изменения закомитить.<br />В этом случае транзакция будет закомичена, если призойдет исключительная ситуация.<br />Все-таки нужен явный .Commit() перед Dispose(), а в самом Dispose() если не вызван коммит делать откат транзакции.hazzikhttps://www.blogger.com/profile/02278053558276208312noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-71195169081434950342010-05-24T19:35:54.467+06:002010-05-24T19:35:54.467+06:00@s_tristan
Спасибо за ссылку. Там есть что-то для...@s_tristan <br />Спасибо за ссылку. Там есть что-то для текущего кода?Alexander Byndyuhttps://www.blogger.com/profile/14185486842573956085noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-53013459421363456792010-05-24T19:31:29.135+06:002010-05-24T19:31:29.135+06:00@Раиль
> приведи пожалуйста пример кода
using(t...@Раиль<br />> приведи пожалуйста пример кода<br />using(transactionFactory.Create(Transaction.Commit))<br />{<br />...<br />}<br /><br />Т.е. после завершения все изменения закомитить.<br /><br />> Из моего опыта получается, что это требование практически всегда в итоге снимается<br /><br />Да, скорее всего, когда логики выборки станет больше, оно уйдет в сервис, но мы говорим про данный Alexander Byndyuhttps://www.blogger.com/profile/14185486842573956085noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-92014906103038848202010-05-24T18:57:18.038+06:002010-05-24T18:57:18.038+06:00Посмотрите на фрейворк S#arp Architecture (sharpar...Посмотрите на фрейворк S#arp Architecture (sharparchitecture.net)<br />Там реализация DDD и разделение кода просто вылизаныs_tristanhttps://www.blogger.com/profile/00632655152766079847noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-18441160233441507162010-05-24T16:05:44.072+06:002010-05-24T16:05:44.072+06:00>> ммм... всегда Commit? а зачем тогда транз...>> ммм... всегда Commit? а зачем тогда транзакция?<br />> Ее же по-разному можно реализовать. Например, передать Commit или Rollback в функцию Create. Это решение не единственно правильное.<br /><br />приведи пожалуйста пример кода. не могу понять :(<br /><br />>> В реальных приложения как правило никогда не > нужно все, скорее вывод постраничный<br />Но в данном случае ведь тмиhttps://www.blogger.com/profile/12687297686129555871noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-74972333518560597522010-05-24T15:50:09.817+06:002010-05-24T15:50:09.817+06:00@Раиль
> такой вывод сообщения об ошибке пользо...@Раиль<br />> такой вывод сообщения об ошибке пользователю может привести к утеканию данных<br /><br />Да, он мне тоже не нравится. Писал об этом.<br /><br />> ммм... всегда Commit? а зачем тогда транзакция?<br />Ее же по-разному можно реализовать. Например, передать Commit или Rollback в функцию Create. Это решение не единственно правильное.<br /><br />> В реальных приложения как Alexander Byndyuhttps://www.blogger.com/profile/14185486842573956085noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-39739196803422251992010-05-24T15:49:53.409+06:002010-05-24T15:49:53.409+06:00параметр string saveAndExit использует только как ...параметр string saveAndExit использует только как булев параметр, зачем тогда string ?тмиhttps://www.blogger.com/profile/12687297686129555871noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-63859752554117161272010-05-24T15:38:21.561+06:002010-05-24T15:38:21.561+06:00> Он может быть в вызове Dispose. Но это как од...> Он может быть в вызове Dispose. Но это как один из возможных вариантов. <br /><br />ммм... всегда Commit? а зачем тогда транзакция?<br /><br />>> метод GetAll вреден!<br />>Чем?<br /><br />свои наличием. это дает возможность появляться коду типа repository.GetAll().Where(user=>user.Name=name)<br /><br />это к вопросу о том какой должен быть Repository: общий или конкретный. Если тмиhttps://www.blogger.com/profile/12687297686129555871noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-22378413075969817782010-05-24T15:28:17.595+06:002010-05-24T15:28:17.595+06:00такой вывод сообщения об ошибке пользователю может...такой вывод сообщения об ошибке пользователю может привести к утеканию данных (например при ошибках из бд или файловой системы):<br /><br /> catch (Exception ex)<br /> {<br /> ModelState.AddModelError("formReport", ex.Message);<br /> }тмиhttps://www.blogger.com/profile/12687297686129555871noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-48231551070678446002010-05-24T15:26:38.193+06:002010-05-24T15:26:38.193+06:00@Раиль
> метод GetAll вреден!
Чем?
> в мето...@Раиль<br />> метод GetAll вреден!<br />Чем?<br /><br />> в методе Edit не проверяется что сущность с таким id существует<br />Да, стоит проверить. Но это уже из разряда вылизывания кода.<br /><br />> не хватает transaction.Commit<br />Он может быть в вызове Dispose. Но это как один из возможных вариантов.Alexander Byndyuhttps://www.blogger.com/profile/14185486842573956085noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-40664492808135059612010-05-24T15:24:30.406+06:002010-05-24T15:24:30.406+06:00тут тоже проблемы:
- метод GetAll вреден!
- в мет...тут тоже проблемы:<br />- метод GetAll вреден! <br />- в методе Edit не проверяется что сущность с таким id существует<br />- не хватает transaction.Commit, точнее в такой реализации транзакция не может узнать все было хорошо или плохо, т.к. у нее в любом случае вызовется Disposeтмиhttps://www.blogger.com/profile/12687297686129555871noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-36906448763894004682010-05-23T20:12:02.395+06:002010-05-23T20:12:02.395+06:00@hazzik
Это уже как реализуешь. Я вообще не привел...@hazzik<br />Это уже как реализуешь. Я вообще не привел пример реализации. Можно предположить, что она откатится.Alexander Byndyuhttps://www.blogger.com/profile/14185486842573956085noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-61840863001457187772010-05-23T20:02:22.172+06:002010-05-23T20:02:22.172+06:00@Александр Бындю
Меня интересует, что произойдет с...@Александр Бындю<br />Меня интересует, что произойдет с транзакцией.hazzikhttps://www.blogger.com/profile/02278053558276208312noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-90027339624741205862010-05-23T19:45:30.908+06:002010-05-23T19:45:30.908+06:00@hazzik
Будет исключительная ситуация :)@hazzik<br />Будет исключительная ситуация :)Alexander Byndyuhttps://www.blogger.com/profile/14185486842573956085noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-59792052809731666612010-05-23T19:11:47.018+06:002010-05-23T19:11:47.018+06:00Что будет, если при внутри кода, обернутого в тран...Что будет, если при внутри кода, обернутого в транзакцию возникнет исключительная ситуация?hazzikhttps://www.blogger.com/profile/02278053558276208312noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-71465495526460324652010-05-23T15:15:44.195+06:002010-05-23T15:15:44.195+06:00ну и еще можно добавить что front end работает нап...ну и еще можно добавить что front end работает напрямую с репозиториями, без слоя бизнес-логикиankstoohttps://www.blogger.com/profile/10690746799538408916noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-81601214397886742512010-05-23T14:34:21.097+06:002010-05-23T14:34:21.097+06:00@zerkms
Надо убедиться, что в данном случае Ninje...@zerkms <br />Надо убедиться, что в данном случае Ninject не будет делать Dispose.<br /><br />>Насколько это чревато? <br />Сколько запросов в секунду у сайта?Alexander Byndyuhttps://www.blogger.com/profile/14185486842573956085noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-70577634555409438222010-05-23T14:32:10.558+06:002010-05-23T14:32:10.558+06:00У себя в проекте (mvc2) на работе инжектирую датак...У себя в проекте (mvc2) на работе инжектирую датаконтекст linq2sql (инстанциируется ninject'ом с InRequestScope). Соответственно - создаваться создаётся, а вот диспоуз не делается (негде и некем?). Насколько это чревато?zerkmshttps://www.blogger.com/profile/01683689499126824728noreply@blogger.com