《Cocoa教学:Windows_OOP与Cocoa_MVC之对比》.docVIP

《Cocoa教学:Windows_OOP与Cocoa_MVC之对比》.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《Cocoa教学:Windows_OOP与Cocoa_MVC之对比》.doc

Cocoa教学:Windows OOP与Cocoa MVC之对比 /index.php/archives/cocoachina_251.html 封装不封装,这是个问题。? 今天我在看Cocoa开发者邮件列表的时候,看到一个帖子,求助如何在两个View之间互相通信的问题。做Windows程序员的时间长的我都不好意思说了,我意识到,这个问题在我刚刚接触到Mac上的Objective-C时也遇到过。 我现在可以提出这个问题的简化版:“我有一个对话框,获取了一些用户输入的数据。我现在需要从我那个对话框中把这个数据提取出来以供主窗口使用。如何才能从主窗口获取到对话框里的数据呢?” 本文作者是强悍的Matt Long,作者首发于cimgf,由cocoachina翻译给广大读者。原文地址在这里。文中的“我”指作者。 在Windows里,尤其是C# .NET,你可以通过添加一个Form对象来创建新的窗口,而且还可以简单地在设计窗口中添加一些不同的“控件”。这些操作是非常容易的。不过一旦窗口创建好之后,你需要在主窗口的代码中建立刚才新建的窗口的实例,然后提供公共变量在两个窗口之间设置或者获取数据。窗口类是由Windows Form模板写好直接交给你使用的,这当然可以使代码看起来清晰干净,但是它打破了MVC的惯例,所以大部分Windows的程序员会花费不少时间提升他们思考的方式也就不足为奇了。 我用VS2008做了一个demo程序,截图大概是这样的: ? 看一下主窗口的代码: public partial class Form1 : Form { ? ? Panel p; ? ? ? public Form1() ? ? { ? ? ? ? InitializeComponent(); ? ? ? ? p = new Panel(); ? ? ? ? p.Show(); ? ? } ? ? ? private void btnChangeText_Click(object sender, EventArgs e) ? ? { ? ? ? ? p.OutputText = this.tbInputText.Text; ? ? } } ? 注意看我声明了一个Panel的对象,这是我们需要在上面设置文字的第二个窗口(view)。下面是Panel类的代码: ? public partial class Panel : Form { ? ? public Panel() ? ? { ? ? ? ? InitializeComponent(); ? ? } ? ? ? public string OutputText ? ? { ? ? ? ? set ? ? ? ? { ? ? ? ? ? ? this.tbOutputText.Text = value; ? ? ? ? } ? ? } } ? 好,代码很容易理解,但是从这里就可以看出我的观点:MVC模型已经被破坏了。虽然这个例子里面并没有任何编程逻辑,不过很清楚的是这样的设计导致你只需要把代码放到按钮的事件处理里面就可以了,而不是去将逻辑抽象到controller对象中。 ? 你也许会问,我在C#中如何做MVC呢?呃……这是一个关于Objective-C、Cocoa编程的网站,对于读者们来说这是个作业了……不过坦白讲,我可不知道。我知道那是一件可能的事情,不过C#语言的内部就没有把开发者向这个方向去引导。我也看过一些讲这方面事情的文章,不过那些也都是基本上困难到没法实践的。有几篇号称是MVC不过根本不算,所以如果你真想在C#上面实现MVC,自己想办法弄吧……^o^ 我想说的其实就是要想在C#上面实现MVC,那算你狠。 ? Objective-C/Cocoa的方式 ? 在Objective-C里,你必须明确地创建一个controller用来处理model和view之间的变化。其实MVC应该被称做MCV,因为controller是在model和view之间的一个协调员。如果你的model发生了改变,你的controller会通知view。如果用户在view中做出了某种改变,controller就会通知model。所以我建议初学者可以叫它MCV,会更加形象一点。有点跑题了。 在Objective-C/Cocoa的世界里,我们建立的controller通常是指应用程序(Application)的托管(Delegate),或者可以简单称做app delegate。很多Windows程序员都会在这里迷惑不解的事情是,我们通常学习到的面向对象开发就是你应该去做的事情,而并不会关注为什么你会去做,或者你为什么不去做。我并不是说你别用OOP的思想,而正相反我建议去用。问题是如果把一切都抽象化,那就有点太傻叉了……我们应

文档评论(0)

wyth + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档