|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Lord British, Эрик Эванс фанат-теоретик DDD, хотя для общего ознакомления не воспрещается, конечно. Больше всего опасен фанатизм, видится мне. Простой слабоствязный компонент: ApplicationUI + ApplicationLayer + InfrastructureLayer. Меняешь свой ApplicationLayer на что-то другое, ApplicationUI продолжает так же работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2013, 12:55 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Ошибка, конечно же IDataService в MVC контроллере. Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2013, 12:58 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Lord BritishВ этом примере хоть я и брякнул, что авторВ инфраструктурном слое, считаем что для интерфейсов реализации тупо ставят в очередь и возвращают управление сразу (а уже другие системы никак не связанные с этой занимаются рассылкой и т. п.). На деле из задействованных в примере сервисов при таких вызовах авторvar systemLike1cResponse = _systemLike1C.SyncPaymentData(new SystemLike1CSpecificParameter()); var notifyResponse = _notificationService.Notify(new NotificationSystemSpecificParameter()); var stockResponse = _stockSystem.StartReservationProcess(new StockSystemSpecificParameter()); это прокатит только для сервиса уведомлений/сообщений менеджеров по почте. только в этом случае достаточно получить статус успешности постановки в очередь. тут действительно отдал в очередь и пусть другая система рассылки выбирает и отправляет до посинения не столь критично. хотя от требований бизнеса зависит. для остальных сервисов, насколько я понимаю мало получить статус успеха постановки в очередь. дле сервиса оплаты (что-то вроде банк клиента?) - надо получить возможно еще какие-то данные от платежной системы и т. п.. потому одной очередью тут не отделаться. для сервиса синхронизации с 1С или ей подобной - я даже не знаю что это за процесс, но уверен он долгоиграющий и данные от 1С тоже нужны про резервирование на складе - тоже самое я темный лес в этой специфике, но уверен от складской системы тоже какие-то данные получать нужно. и процесс долгоиграющий. Потому мне не совсем понятно где здесь возникнет CQRS, например. Было бы очень хорошо если бы в ветку набежали, кто с этим сталкивался и завязалась дискуссия . Опять же цель примера была посмотреть какая логика каком слою относится. Но теперь итересно уже другое - вот те моменты что описаны выше. Это прокатит для всех процессов, которые я перечислил, мало того, пригодно только отложенное выполнение, но для этого нужны очереди сообщений. Реальные варианты: - клиент приходит и оплачивает товары или услуги, ему мало интересно ждать и никто не будет держать его на время передачи данных в другие системы(нет соединения, идет закрытие месяца в 1С или накатываются изменения). Или если проблемы в одной из систем, то все остальные бизнес-процессы могут выполнятся тк в большинстве случаев они независимы(например, кладовщики для отправки груза после оплаты, могут даже не знать, что отправлялось сообщение о получении оплаты, а клиенту гораздо важнее полученный груз). Из того, что доводилось делать по подобной схеме в трех разных проектах(использовалась связка nCQRS c вправленными мозгами и nServiceBus): - обмен данными между распределенными БД и другими системами - запуск бизнес-процессов, получение данных из внешних систем В контроллере добавляется одна строчка CommadBus.Send(new PaymentCommad(payment)); Дальше нужно создать агрегированный домен и независимые обработчик событий. Поскольку в большинстве вариантов они независимы друг от друга, то это позволяет расширять систему с горизонтальным ростом сложности, а не вертикальным с перелопачиванием всего кода. Рекомендую CQRS Journey . Есть отличный букварь в том числе на русском и код с реальным примером. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2013, 19:00 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVa, Вот, при более подробном описании процессов многое прояснилось. А то я даже не знал в какой степени эти процессы не зависимы и т. п.. Отдельное спасибо за ссылку, поставил в список на изучение. Как изучу, отыщу вас тут на форуме. Буду вопросы задавать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2013, 00:18 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
2SeVa: киньте ссылку пожалуйста на "отличный букварь в том числе на русском", чего-то не нашел ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2013, 21:05 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SerP19832SeVa: киньте ссылку пожалуйста на "отличный букварь в том числе на русском", чего-то не нашел Видел только в печатном варианте(MIcrosoft Press) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 09:54 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
В попытках понять UoW + Repository возник небольшой вопросик, как быть в такой ситуации? Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2013, 15:53 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
maratoss, не щекоча кишки EF никак, если хочется этой абстракции можно в интерфейс IUnitOfWork ввести метод Undo() или как вы его назавете и в реализации EfUnitOfWork реализовать метод. Я так и не понял выгоды от введения своих интерфейсов, (кроме тестирования с фэйко контекстами) в сложном приложении с поддержкой optimistic concurency и т. п.. это все выродится в исходные реализации EF context,dbset. поделитесь впечатлением от подхода по окончанию... интересно почитать. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2013, 16:49 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Lord Britishmaratoss, не щекоча кишки EF никак, если хочется этой абстракции можно в интерфейс IUnitOfWork ввести метод Undo() или как вы его назавете и в реализации EfUnitOfWork реализовать метод. Я так и не понял выгоды от введения своих интерфейсов, (кроме тестирования с фэйко контекстами) в сложном приложении с поддержкой optimistic concurency и т. п.. это все выродится в исходные реализации EF context,dbset. поделитесь впечатлением от подхода по окончанию... интересно почитать. Undo\Redo должен быть в моделе. Модель должна быть комплексной в виде графа, тогда не будет костылей а'la BindAndCreateIfNotExist(A a, B b). О том как это сделано без собственных лисапедов можно почитать и посмотреть в csla ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2013, 08:33 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVa, наверное это зависит про какое undo/redo ведется речь, если ему при редактировании отдельной ентити надо отменить что-то IEditableObject есть, а если ему что-то вроде Rollback или Revert в противовес SaveChanges это уже другое. Я о последнем писал, помоему ему это надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2013, 10:04 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Lord Britishнаверное это зависит про какое undo/redo ведется речь, если ему при редактировании отдельной ентити надо отменить что-то IEditableObject есть, а если ему что-то вроде Rollback или Revert в противовес SaveChanges это уже другое. Я о последнем писал, помоему ему это надо. Да, хотел узнать, в ситуации когда метод вызывает другие два, каким образом можно выполнить их в одной транзакции, чтобы можно было сделать rollback, если что-то пошло не так. SeVaО том как это сделано без собственных лисапедов можно почитать и посмотреть в csla Сейчас посмотрим. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2013, 10:19 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
maratossLord Britishнаверное это зависит про какое undo/redo ведется речь, если ему при редактировании отдельной ентити надо отменить что-то IEditableObject есть, а если ему что-то вроде Rollback или Revert в противовес SaveChanges это уже другое. Я о последнем писал, помоему ему это надо. Да, хотел узнать, в ситуации когда метод вызывает другие два, каким образом можно выполнить их в одной транзакции, чтобы можно было сделать rollback, если что-то пошло не так. если вопрос только технический касаемо EF, то так Код: sql 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2013, 11:02 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
maratoss, состояния Entity в памяти, тоже можно привязать к TransactionScope, чтобы по rollback оно делало Revert. Я не касаюсь зачем это может быть нужно, просто есть такая техническая возможность. Может запилю пример попозже, если интересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2013, 11:14 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
простейший memory-ресурс, участвовать может только в одной транзакции и контролировать только value-типы, по факту случай вырожден до тупой обработки уведомлений о commit/rollback Код: sql 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.
пример использования Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
может когда понадобится, используешь идею приминительно к ef, может где еще. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2013, 16:51 |
|
|
start [/forum/topic.php?fid=17&msg=38142998&tid=1350110]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
129ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 230ms |
0 / 0 |