MVC vs MVP vs MVVM

MVC,MVP,MVVM是三种流行的设计模式,常用于框架设计中。

MVC最早由Trygve Reenskaug发明的,并最早应用在Smalltalk-80中。MVC是被误读最多的设计模式之一,关于它的解释和实现有很多版本,也有过很多“升级”解释,但设计思想是一样,这里仅描述它原始概念。
在MVC中,View和Controller是成对出现的,共同称为表现层,Model可以为多个VC组合作为数据源,这就是MVC业务和表现分离的实现。其中,Model是重量层,实现业务逻辑和数据操作,View是UI层,仅仅实现数据展示,和用户交互,而Controller用于将用户操作传递给Model进行业务操作,并根据Model返回值执行相应UI操作。
MVC是用观察者模式实现的,从下图可以看出,View监听Model,Controller监听Model和View,而Model监听Controller。

MVP最早来自Taligent发布在IBM开发者中心的文章中,是MVC模式的衍生和改进。
在MVP中,Controller替换为Presenter,它更像是一个中介,处于M和V中间,这时M和V不再直接通信,而是通过Presenter。如下图所示,用户操作通过P从V传递到M,而数据通过P从M返回给V。它使MV之间松耦合,然而确加重MP之间的耦合度,这个可以为M增加一个Facade(如get操作)与P通信。

MVVM源自于Martin Flower的Presentation Model (PM),关于MVVM的理解目前是统一的。和MVC不同的是,VM更重,它除了负责与M的业务通信,同时还是V的管理员,如下图,它是独立于V的,V和VM是多对一的关系,如下图。数据实际存储在VM中,V只有对VM中数据的引用,通过双向绑定实现数据的同步。

 

REFERENCE:
https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
http://wiki.c2.com/?ModelViewController
https://martinfowler.com/eaaDev/uiArchs.html#ModelViewController
http://wiki.c2.com/?ModelViewPresenter
https://medium.com/@ankit.sinhal/mvc-mvp-and-mvvm-design-pattern-6e169567bbad#.tt8ljstee
http://www.infoworld.com/article/2926003/microsoft-net/exploring-the-mvc-mvp-and-mvvm-design-patterns.html

MVC vs MVP vs MVVM

聊聊impossible person

某天上班路上听到一则讨论how to deal with impossible person的广播,短短几十分钟感觉受益匪浅。回想满是‘高智商低情商’的IT界,不知道身边多少impossible person,他们可能在我们的圈子里,可能是我们的客户,更可能是领导。这类人之所以被称为impossible person,“不可能先生”,因为我们不可能和他们达成共识,不可能进行理智的谈话,他们永远认为毛病出在别人的身上。

这类人群有多种类型,例如依赖型,控制型,竞争型,消极型,自负型,抱怨型,消极型(装可怜)等等,针对每种类型有不同的处理方式,但存在一些通用的原则,帮助我们避免陷入无休止的争论中。

1. 不要尝试改变他们
不可能与他们进行理性的讨论,他们根本不听原因,即便是合理的,所以别在一个点上争执,避免一对一争执,引入第三方团体。不要辩解,因为说服不了他,他也不听原因,因为他觉得就是你的错。不要冲突,因为他就是想挑事的人,擅长颠倒黑白,如果你开始情绪化,被他激怒,这正好是他想要的,就是故意伤害你,让你成为坏人。不要理会他,保持距离,不要跳进他想要的冲突陷阱,别给他发怒的机会,他就会转移到别的地方。
2. 调整自己心态,冷静下来
深呼吸,当你觉得要失去理智,发怒,赶紧离开,或者找其他事情干,让自己远离他,这样避免不理智结果发生而后悔。性格不合,其实两个人本身都没有问题,但他们在一起却没发融洽的共事,是双方沟通问题。避免以牙还牙,不要作为报复或者存在不平衡感,让自己变成了impossible person,将这些不好的特性反过来用在别人身上。将这种过程当做一次成长,当做一次人生课程。当impossible person意识到自己错了,自尊心会让他们的行为导向另一个极端,不要被这种行为所左右。他们就是想找软柿子捏,你想表示和平,谦虚,不一定需要让步,表现出懦弱,要保持自尊心,做自己,找个懂你的人倾述,例如旅行,在线社区,好友等,让自己好起来,不要一个人生闷气。不要老想这件事情,让自己从事更多有意义的事情,认识更多的人,不要让冲突影响到自己的正常生活。千万不要带着情绪卷入讨论中,保持沉默,偶尔幽默一下,表现出中立的态度,就事论事。也找找自身问题,即便自己是对的,站在对方角度自省一下(也会让自己平静下来)。
3. 尝试理解他们,找到value language
即便是impossible person,他们也有自己的诉求,有自己value language,找到他的value language,学会成就别人。
4. 不要让他们成为敌人
如果他还不是那种找茬型的人,可以考虑提出一起思考型问题,大家一起商量,而不是钻到牛角尖,让他觉得你确实在努力解决问题。动态规划,这个属于高级策略,就是要预测到他的下一步计划,而采取相应的反制措施。如果是长期的,实在躲不开的情况,做好打持久战的准备,学习他的策略,提前考虑应对策略,终极策略就是可以准确猜到他下面会怎么做,这时候也要明确告诉他:“你真的非要这样吗?”,至少某种程度让他感受你的坚毅。给自己设置原则和底线,让他知道底线,超出底线绝不能妥协。无论他多需要你,多么强烈挽留,远离impossible person。

我觉得在IT领域重点防治三种人:控制型竞争型消极型
1. 针对控制型的人,因为他们必须要证明自己是对的,喜欢指责别人,所以别试图证明他是错的,或者你做的更好。
2. 针对竞争型的人,他们总想争个高下,没有冲突也要制造冲突。不要受他情绪影响,他们要没无休止的斗下去,要么彻底甩掉你。如果他不肯让步,就让他赢,另找时间再进行研究,别耗下去。同时不要被恐吓到,被控制,或者闹翻,做好自己的事情。
3. 针对消极型的人,他们表面不说,甚至微笑,但下面却在准备攻击,会将来偷偷的爆发出来。这种情况要摸清到底为什么,不要表示出敌意,真心估计他说出真实的想法,沟通到正面解决。

总之,关于impossible person,不要认为这类人不会出现在我的身边,积极面对就好。第一,平常心,保持冷静。准确识别impossible person,treat like a game,like way to grow up; 第二,不要让自己变成impossible person,不要冲动起来。

REFERENCE
http://www.wikihow.com/Deal-With-Impossible-People
http://www.huffingtonpost.com/deepak-chopra/how-to-deal-with-difficul_b_598163.html
http://www.scienceofpeople.com/2014/03/4-types-difficult-people-deal/

聊聊impossible person