2012年8月23日星期四

Metro编程(CPP + XAML)初玩

    从听说微软重新启用C++ Native那一刻起,就一直想尝试一下微软在MFC之后还会有什么创造性的编程模式。
    安装VS2012一路默认下来,安装完毕后,迫不及待的新建了空白Metro应用。以下是我初步试玩的一些心得:

  1. 使用ref new来代替C++/CLI中的gcnew。大致分析了下自动生成的代码,发现跟WPF的那套东西很像(PS:貌似WPF不支持C++),包含了大量的C++/CLI语法,可见Metro的C++库依然不是原生的C++,微软还是经过了一层包装(PS:可能是为了给C#或者JS调用的缘故吧)。新建对象方式跟C++/CLI还是有一些不同的,不再使用gcnew创建对象,而是使用ref new代替了gcnew,难道这就是微软所宣传的创说中的非托管(C++/CLI是使用gcnew在CLR上创建对象)?
  2. 新的UI构建方式。这应该是微软下了重点心思来构建的界面开发模式。XAML本身是WPF开发的一部分,是一种XML的使用者接口描述语言,与HTML类似,非常容易入门。对于微软来说并不是什么新鲜东西,但这应该是其第一次和Native C++结合使用。谈到这里就不得不吐槽一下MFC的UI构建方式:虽然MFC使用了一种所见即所得的UI构建方式,在刚推出的时候给开发者带来了很大的方便,但其C和C++混合使用的语法还是让很多初学者摸不着头脑,各种接口混乱,各种宏定义是程序逻辑混乱,代码艰涩难懂。基于XAML的UI构建方式就让开发者像开发HTML页面一样简单,结构层次分明。
  3. 界面和程序逻辑的分离。这应该是未来软件开发的发展方向,对于java/C#等语言来说,这中开发方式应该是相当普遍,并且广为使用的,但对于Native C++使用者来说,构建MVC的模型本身就相当麻烦。MFC的那个时代,微软推荐一种文档/视图的模式,这应该是MVC的一种变种,相信用过文档/视图模式的开发者,都会有的感触,我就不再吐槽了(PS:貌似这本身就是一种吐槽)。
  4. 与STL的混合使用。相信使用C++的每一位开发者对STL的重要性都深有体会。但微软之前的C++/CLI基本不支持STL,类似于 std::list<System::String^> 这样的语法在托管C++中是不支持的。每次需要使用容器的时候,我都只能蛋疼的去使用.NET自带的托管容器 System::Collections::Generic::List ,此托管List对于我这种更熟悉STL的人来说用起来那是相当难受。不过没办法,只能忍受。不过在Metro中,因为微软是使用的Native C++,STL与Metro中的ref new对象混合使用,目前感觉还是相当良好的。这一点还是让我感觉相当的兴奋。

初玩CPP + XAML,总体来说给我的感觉还是相当不错的,还是看到微软下了很大的决心,毕竟Native code的效率要优于Managed code,用户体验才是关键。

没有评论:

发表评论