|
|
|
Паттерн MVP
|
|||
|---|---|---|---|
|
#18+
Правильно ли я понимаю эту парадигму(святая троица)? Вот набросал небольшой пример на Python(2.7.9 + PyQt 4.8.xx). Код: python 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.12.2014, 03:36 |
|
||
|
Паттерн MVP
|
|||
|---|---|---|---|
|
#18+
user199617Правильно ли я понимаю эту парадигму(святая троица)? Вот набросал небольшой пример на Python(2.7.9 + PyQt 4.8.xx).нет, неправильно. К MVP этот код никаким боком не относится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2014, 05:21 |
|
||
|
Паттерн MVP
|
|||
|---|---|---|---|
|
#18+
White Owl, почему это не mvp? вид же ничего не знает ни о презентере, ни о модели? модель работает с данными, данные получаем через апи. можно пример расово верного мвп? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2014, 08:32 |
|
||
|
Паттерн MVP
|
|||
|---|---|---|---|
|
#18+
https://github.com/pahaz/Example-of-MVC-pattern-on-pure-Python/blob/master/appMVCv2.py нашел такой пример mvc не вижу особых различий. ну там есть роутер (у серверного приложения единственное событие на которое нужно реагировать это запрос). единственное что данные я проверяю в виде. модель у меня это просто данные апи возвращает ответ в виде json. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2014, 09:13 |
|
||
|
Паттерн MVP
|
|||
|---|---|---|---|
|
#18+
linux4gaysWhite Owl, почему это не mvp? вид же ничего не знает ни о презентере, ни о модели? модель работает с данными, данные получаем через апи. можно пример расово верного мвп?Ты код смотрел? Покажи мне в этом коде модель и презентера. Ну хотя бы одного из них. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2014, 19:37 |
|
||
|
Паттерн MVP
|
|||
|---|---|---|---|
|
#18+
White Owl, напиши мне пример ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2014, 15:24 |
|
||
|
Паттерн MVP
|
|||
|---|---|---|---|
|
#18+
А такой пример? Это MVC? [quote wiki ] Passive view[edit] Passive view variant * The controller is the only component which can communicate with the model and the view. There is no direct communication between view and model. * The controller can send commands to the model to update the model's state (e.g., editing a document). It can also send commands to its associated view to change the view's presentation of the model (e.g., by scrolling through a document). * The controller polls the model for updates. Also called model-view-adapter [/quote] Код: python 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2014, 09:47 |
|
||
|
Паттерн MVP
|
|||
|---|---|---|---|
|
#18+
user199617А такой пример? Это MVC?Нууу... Да, формально это MVC. Необходимые условия в этом коде уже есть. С другой стороны, притягивание MVC для этой задачи это слегка... того... Из пушки по воробьям. Для процедуры логина первый пример был намного лучше. Вообще, на свете есть бесконечное количество задач которые можно реализовать через MVC/MVP/MVVM. Если у тебя есть переменная в памяти и значение этой переменной надо показать юзеру - это можно реализовать через MVC. С другой стороны, в большинстве случаев это нафиг не нужно и будет только загромождать код и делать логику программы излишне замороченной (как в твоем втором примере). Критерием для использовать или нет MVC (или его кузенов) может служить вопрос: У тебя есть переменная. Эту переменную надо показывать одновременно в двух (или больше) местах на экране. В одном (или всех) из этих визуальных мест юзер может эту переменную редактировать. По изменению переменной в одном визуальном месте она должна обновится во всех остальных местах. Если у тебя задача стоит именно так - тогда паттерн MVC, может быть полезным. Если у тебя нету множества одновременных отображений, то MVC не нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2014, 19:02 |
|
||
|
Паттерн MVP
|
|||
|---|---|---|---|
|
#18+
White OwlЕсли у тебя задача стоит именно так - тогда паттерн MVC, может быть полезным. Если у тебя нету множества одновременных отображений, то MVC не нужен. При одновременном отображении MVC чаще всего не нужен. С избытком хватает MV, а C - дурацкая лишняя прокладка. MVC становится реально нужным тогда, когда идёт отображение нескольких M на несколько V. Например, у меня он хорошо лёг в задачу типа Экселя. Когда с одной стороны есть модель данных, есть модель выделения (selection), есть модель атрибутов отображения (форматы-цвета-шрифты); с другой стороны есть сетка, есть поле редактирования текущей ячейки, есть список листов. На ряд операций они реагируют одинаково или сходно (например, удаление строки или очистка выделенной области). На некоторые операции они реагируют по-разному (например, атрибуты отрисовки из верхней строки копируются в новую, а данные - нет). Вот здесь MVC стал естественным и удобным решением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2014, 20:57 |
|
||
|
Паттерн MVP
|
|||
|---|---|---|---|
|
#18+
softwarerWhite OwlЕсли у тебя задача стоит именно так - тогда паттерн MVC, может быть полезным. Если у тебя нету множества одновременных отображений, то MVC не нужен. При одновременном отображении MVC чаще всего не нужен. С избытком хватает MV, а C - дурацкая лишняя прокладка. А вот это уже вопрос по сложности обработки данных. Чем больше самих данных, чем сложнее правила обработки этих данных, чем больше разных "сопутствующих" аттрибутов у "реальных" данных. Тем больше полезность от Controller. Это если использовать именно MVC. И да, в большинстве реальных задач controller действительно не нужен, чаще всего хватает MV пары. А если точнее, то правила изменения данных встроенные во view напрямую совпадают с правилами обработки данных в model. Например: строки это строки, числа это числа, дата это дата и тд... Тогда сontroller практически встроен во view и его как отдельного модуля может вообще не быть. А если нужно проверять что дата в поле "от" раньше чем дата в поле "до".... А если в этом поле стоит галочка, то вон то поле должно быть заполнено... Вот тогда нужность в controller появляется очень быстро. А если идти по пути MVP, то "прокладка" уже совершенно необходима. И кстати, user199617, у тебя в во втором примере как раз MVP, а не MVC. В классическом понимании этих паттернов Controller не влияет на то что отображается в View. В MVC View читает данные из модели напрямую, но обновляет через контроллер. А в MVP view запрашивает у presenter что отображать, а когда presenter считает нужным, он сам дергает view. Смотри на свой метод Controller::login. Ты там напрямую манипулируешь view... вот это и есть главный признак MVP. Если хочешь превратить это в MVC, то добавь в модель проперть "результат последней попытки логина" и читай ее из view. Model::login будет кидать в View сигнал "есть обновления" и View будет обновляться отрисовывая результаты процедуры логина. Еще можешь вот тут почитать: http://nirajrules.wordpress.com/2009/07/18/mvc-vs-mvp-vs-mvvm/ Там хорошо расписаны отличия и особенности всех трех паттернов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2014, 23:21 |
|
||
|
Паттерн MVP
|
|||
|---|---|---|---|
|
#18+
White Owl, Я еще такой пример сделал: Код: python 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. Соответствует ли он парадигме MVP? Может ли вид содержать ссылку на Presenter(self.presenter = presenter)? Код формы генерированный: Код: python 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2014, 09:17 |
|
||
|
Паттерн MVP
|
|||
|---|---|---|---|
|
#18+
user199617Я еще такой пример сделал: .... Соответствует ли он парадигме MVP? Нет. На этот раз у тебя получился MVC with passive view. user199617Может ли вид содержать ссылку на Presenter(self.presenter = presenter)?В MVP - да. В MVP view напрямую вызывает presenter и просит его обработать действия юзера. У тебя в коде view никого не вызывает вообще, только взводит сигналы, которые отслеживаются системой (вне твоей программы), и система будит Presenter (который на самом деле классический controller from MVC with passive view) и он уже напрямую взаимодействует со всеми. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2014, 19:28 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=39&tid=1341128]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
22ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 342ms |

| 0 / 0 |
