MVA Universal Windows Apps系列学习笔记1
昨天晚上看了微软的Build 2015大会第一天第一场演讲,时间还挺长,足足3个小时,不过也挺震撼的。里面提到了windows 10、Microsoft edge浏览器、Azure云平台、Office平台、Cortana助手、Visual Studio Code轻量级编辑器、Android程序在VS中开发及移植到.NET平台,Objective C编写的IOS程序在VS中开发、HoloLens的3D全息虚拟现实技术及眼镜等,微软一如既往地支持企业级应用,并提供平台式租用服务。说说我的感受,第一、我对游戏和个人应用开发不怎么在行,主要是做企业级信息系统的开发,因此微软的Azure、Office、Dynamic、SharePoint等企业级平台还是很关注的,这方面以后要多研究;第二、Windows 10会针对各个设备进行大一统,同时Visual Studio对跨平台、跨设备和开源、免费、社区等的支持力度进一步加强,所以今后在以.NET为主线的同时要了解更多的知识;第三、Project Spartan被命名为Microsoft Edge,这个Edge被定义为创造与消费的边界,而且这款全新浏览器已经被打造为Modern Browser,甚至只需要改动少量代码就可以移植Chrome浏览器上的扩展程序,这样看来以后走B/S路线的Web开发者,要放手学习前端开发知识,因为可恶的IE6被抛弃,兼容性的问题以后不会是大问题了;第四、VS Code可在Windows、Mac OS、Linux系统上使用,而用JAVA/C++编写的Android程序和OC编写的IOS程序也可以在VS中开发或移植,这说明今后不能只会传统的Web开发或本地程序开发,还要逐步学习移动程序开发;第五、最后就是很牛叉的HoloLens,这个实现的效果很炫,但是体验的人还不多,这个产品微软还没有完工,因此还在做一些保密工作,不过在一个亲临现场并预约到现场体验的人发回的帖子中看到,这个需要先用Unity 3D建模,然后在VS中编译生成这么一个过程,好吧,以后Unity 3D的知识也需要学习了。上面扯完废话了,顺便说一下学到的一个单词——App,以前一直一个字母一个字母地念:“a-p-p”,现在发现老外不这么念,查了一下有道词典,它的音标为[æp]。接下来,今天就在微软的Microsoft Virtual Academy中(以后简称MVA)找到了一个免费视频进行学习,现做一个系列学习笔记,由于是个人学习笔记,不是专业教程,因此如有错误,请到MSDN中确认。
进入正题,第一课是简介,该课程的名字叫“快速入门:使用HTML和JavaScript开发Universal Windows Apps,讲解老师是Michael和Jeremy。老师首先说明了该课程受众,要求具备一点Web开发知识:HTML、CSS、JavaScript,另外若做过Web开发或Native开发更好,还有想要解决一套程序能够在不同设备上适用这一问题的人。还有老师给了一些技术支持网站,有msdn.com、codeshow.codeplex.com等。接下来简单介绍了MVA社区,这是一个很不错的免费教程视频学习网站,同时在这里学习(Learn)时还可以获取积分(Earn),有了积分应该可以做一些事情,关于积分这点还没研究。
这门课主要讲解Universal Apps——通用程序,老师把程序分为3个部分,我觉得这么划分很有道理,数据层、逻辑层、UI表现层。对于Web App,云端(通常也叫服务器端)具有数据层、逻辑层和表现层的控制权,然后浏览器端(也叫客户端)从服务器上获取这些功能,并在本地运行。有人会提出JavaScript可以在浏览器端运行,但是从某种意义来说,那些只是为了增强用户体验,最终控制权还是归服务器端,因为浏览器端的各种操作只有被服务器端处理了才有意义。然后再来看Native App,同样的三层,不过数据层和逻辑层都是在云端和客户端同时具有各自的控制权,而UI表现层还是只在客户端存在(这个不是从服务器端获取到的)。传统的两种App介绍完了,那么Universal App是什么呢?老师举个例子,如果手机程序有个集合,windows程序有个集合,则Universal App就是这两个集合的交集。
前面介绍完了相关概念,下面进行实践。打开VS,File-New-Project,在左侧列表的模板中展开VC#,再展开Store Apps,里面赫然出现3种项目模板,它们分别是Universal Apps、Windows Apps和Windows Phone Apps。这里说明以下,这个Store Apps跟原来的Windows DeskTop开发和Web开发不是一回事,这里开发的程序,是出现在Windows应用程序商店中的,而Windows Apps是给原来类似Windows RT系统(也可以理解为平板)开发的程序,Windows Phone Apps是给手机开发的程序,而Universal Apps是对这两种程序的统一,稍后会进一步说明如何统一。这里老师在课程的讲解中也提到了,为平板开发出程序的效果与为手机的不一样,比如说同一个程序,在平板上可能是横向滚动,而到了手机上就会变成纵向滚动,因此这两种程序有共通之处,但是也有少许不同,这就是为什么同时有两种模板类型的原因。但是开发者总是希望自己的代码能够复用,因此就推出了Universal Apps模板(我翻译为通用程序)。巧合的是这次2015开发者大会中,有一个图片讲解了微软对程序的构想,最顶层是Windows Store,接下来是Universal Platform(通用平台),而底层则是四种类型:Web、.NET/WIN32、Android App、IOS App,所以我总结微软最想做的一件事,就是对技术的统一,开发者只要写一遍代码,剩下的至于给哪个平台使用等等交给微软来完成(怎么感觉微软成为了巨大的中间件?嘿嘿!)。回到正题,这里以空白项目为例,VS会自动生成3个解决方案文件夹,这里老师还特意讲解了解决方案文件夹和文件夹的区别。解决方案文件夹是把多个项目放到一起,给人的感觉就是一个项目,但是实际上在文件浏览器中是不存在这个文件夹的;而文件夹,比如在某个具体项目中添加一个文件夹,这时VS会在磁盘上创建一个真实的文件夹,可以用文件浏览器查看到,并且老师希望学习者能够区分这两者的差别。而在这个解决方案文件夹中存在3个项目,一个是{你的项目名称}.Windows8.1,另一个是{你的项目名称}.WindowsPhone8.1,还有一个是{你的项目名称}.Universal。前面提到Windows Apps(以下简称Win)和Windows Phone Apps(以下简称Phone)这两种项目,可能你已经做了一个平板或手机程序,这时你存在一个已有的Win项目或Phone项目,现在你打算在这个已有的解决方案中添加另一种项目,VS就会提示你,需要将你的项目类型转换为Universal Apps,同时会生成一个空的Universal项目。所以不管怎样,最后都是3个项目。
接下来再说说这3个项目的关系。你想让你的程序跑在平板上,那么就生成提交Windows8.1后缀的那个项目,而想跑在手机上,就生成提交WindowsPhone8.1后缀的那个项目。而在生成的过程中,VS会检测生成目标项目(Win或Phone)与Universal项目中不同文件结构的部分,会把检测到的部分也编译生成进去,而相同文件结构的部分则以目标项目为准。也可以说目标项目中的文件代码把Universal项目中具有相同文件结构的文件代码给替换了,注意这里是替换,不是合并(Merge),这点老师特意强调的。想想Config配置文件,如果当前目录中有,以此为准,如果没有则找上一级目录,如果还没有则可能会到系统文件夹中去找;或者再想想类的继承,当子类重写了父类的方法,那么对于子类对象是不知道有父类方法的,它会执行子类重写的方法。这些思维是多么类似啊!再说说“相同文件结构”,就是从项目根一级往下走,一直到文件名,比如说Win项目中有一个子文件夹js,下面有一个文件default.js,而Universal项目中也有一个子文件夹js,下面同样有一个文件default.js,这两个文件就是具有相同文件结构。这里老师给出一点建议,根据约定,JavaScript文件只能在Universal项目中出现,Win项目中和Phone项目中不要出现,这个其实很好理解,js文件代表了逻辑层,通用文件的意义在于复用逻辑层的代码,这样逻辑层代码只写一遍即可,如果Win项目或Phone项目中都写自己的js代码,那就没实现代码的复用,就直接分别写各自的项目就可以了,还要通用项目何用?但是这毕竟只是约定俗成的东西,也就是不会强制性要求,譬如在逻辑上平板和手机就有那么一点点的区别,也可以对这点区别在各自项目中分别写js文件。这里老师给出了建议总结:Win项目和Phone项目中会经常出现HTML代码(可以理解为表现层),而CSS代码不会很经常出现,至于JavaScript代码则是很少出现或尽量不出现。
最后老师要给出Demo,就是前面提到过的codeShow,这是一个开源项目,可以在线浏览代码,也可以将代码打包下载,还可以克隆代码库,甚至参与代码开发并提交改进的代码。这里老师提到一点,很有道理,就是在提交代码时需要提供Twitter账号,然后会在codeShow最后面显示为这个项目贡献过代码的人,他说这么做可以提高你的知名度并能展示你的实力,所以以后我也要多参加开源项目,并贡献有效的、高质量的代码。最后本课总结(Summary),Web程序和本地程序的关系、区别以及介绍,通用程序的介绍,和通用程序如何设计。
这节课的课后答题错了3个,看来还有待提高,课程本身是全英文,英文听说能力差是很大阻碍,还好微软给出了中文字幕,希望自己能在学习过程中提升自己的英文听说能力。这节课的学习笔记就写到这里,让我们等待下节课的笔记!