Sunday, April 5, 2015

MVC - MVP : Difference between these design patterns?



In traditional UI development - developer used to create a View using window or usercontrol or page and then write all logical code (Event handling, initialization and data model, etc.) in code behind and hence they were basically making code as a part of view definition class itself. This approach increased the size of my view class and created a very strong dependency between my UI and data binding logic and business operations. In this situation, no two developers can work simultaneously on the same view and also one developer's changes might break the other code. So everything is in one place is always a bad idea for maintainability, extendibility and testability prospective. So if you look at the big picture, you can feel that all these problems exist because there is a very tight coupling between the following items.
  1. View (UI)
  1. Model (Data displayed in UI)
  1. Glue code (Event handling, binding, business logic)
MVVM: Model–View-ViewModel talks of creating a new model (in addition to your domain model). This model normally adds additonal properties from the prespective of View (as we understand that View has controls in addition to data which it’s displaying). For instance if View had a property IsChecked and Presenter was setting in classic MVP, in MVVM Presenter will have that IsChecked Property which View will sync up with (doesn’t it look like Strategy pattern has been replaced with Observer?). So now a Presenter becomes more like a combo of – View Properties & Model properties which would be synchronized with View. So why not rename Presenter to ViewModel? Do that and you get MVVM. MVVM is attractive for platforms which support bi-directional binding with less effort. Also a minor tradeoff is ViewModel unlike Presenter can stand on its own (Presenter normally requires a View’s interface)
Definition of Glue code is different in each pattern. Although view and model is used with the same definition in all patterns.
In case of MVC it is controller. In case of MVP it is presenter. In case of MVVM it is view model.


MVC: Three components – View (your UI), Model (your business entities / data – that view is displaying) & Controller (contains the logic that alters the model depending on the action triggered by UI, typically implementing a Use Case). It’s widely known that MVC is a compound pattern (View and Controller have Strategy implementation, View itself can be a Composite implementation & View and Model are synched through Observer). In this case Controller doesn’t know anything about View, and the idea is that a View can switch Controllers (for instance depending upon who has logged to the system) & a single controller can be used by multiple Views. View subscribes to the changes done to the model & hence both are sync from the data perspective. One of the disadvantages of MVC is that it’s difficult to unit test. Controller manipulates the data but how about asserting those changes from a view perspective. For instance on click of a button you raise an event to controller, and controller modifies the value in model. This value modification changes the font size / color in View. Unit testing this scenario is slightly difficult in MVC.






MVP: Again three components. But dependencies change (look at arrows in the diagram). Over here we replace Controller with Presenter (one which presents the changes done in model back to view). The main difference between both is that Presenter refers back to the view while Controller doesn’t. Normal pattern found here is to create an abstraction of the View (in terms of properties / events) & Presenter refers to it. This makes the mocking of View much easier & hence the Unit Testing aspect. Presenter here hence takes the responsibility of not only manipulating model but also updating the view. Of course the implementations of MVP differ in real world in terms of how much thin the view is, some prefer keeping basic logic still inside view & taking complex logic in presenter, while others prefer keeping the entire logic in Presenter. 




Saturday, April 4, 2015

Places to visit without visa (Indian passport)


1. Bahrain – eVisa
2. Bhutan – No Visa
3. Bolivia – Visa on Arrival
4. Cambodia – Visa on Arrival
5. Cape Verde - Visa on Arrival
6. Comoros -Visa on Arrival
7. Dominica – No Visa
8. Eucador - No Visa
9. El Salvador - No Visa
10. Ethiopia - Visa on Arrival
11. Fiji - No Visa
12. Gabon – eVisa
13. Georgia – eVisa
14. Grenada – No Visa
15. Guinea-Bissau – Visa on Arrival
16. Guyana – Visa on Arrival
17. Haiti – No Visa
18. Indonesia – Visa on Arrival
19. Jamaica – No Visa
20. Jordan – Visa on Arrival
21. Kenya – eVisa
22. Laos – Visa on Arrival
23. Madagascar – Visa on Arrival
24. Maldives – Visa on Arrival
25. Mauritania – Visa on Arrival
26. Mauritius – No Visa
27. Micronesia – No Visa
28. Moldova – eVisa
29. Myanmar – eVisa
30. Nepal – No Visa
31. Palau – Visa on Arrival
32. Rwanda – eVisa
33. Saint Kitts and Nevis – No Visa
34. Saint Lucia – Visa on Arrival
35. Saint Vincent and the Grenadines – No Visa
36. Samoa – Permit on Arrival
37. São Tomé and Príncipe – eVisa
38. Senegal – Visa on Arrival
39. Seychelles – Visa on Arrival
40. Somalia – Visa on Arrival
41. Sri Lanka – No Visa but special permit required
42. Tanzania - Visa on Arrival
43. Thailand - Visa on Arrival
44. Togo - Visa on Arrival
45. Timor-Leste – Visa on Arrival
46. Trinidad and Tobago – No Visa
47. Tuvalu – Visa on Arrival
48. Uganda – Visa on Arrival
49. Vanuatu – No Visa
50. Zambia – eVisa
51. Zimbabwe – eVisa
52. Djibouti - Visa on Arrival
53. Hong Kong – No Visa
54. Antartica -Visa on Arrival
55. South Korea – No Visa
56. FYRO Macedonia - No Visa
57. Svalbard - No Visa
58. Montserrat - No Visa
59. Turks & Caicos Islands - No Visa
60. Cote d’Ivoire – eVisa











MVC - MVP : Difference between these design patterns?

In traditional UI development - developer used to create a  View  using window or usercontrol or page and then write all logical code ...