[ArchitectureDesign]跨平台架构设计Clark159

在开始谈跨平台架构设计之前,请大家先看看上面这段影片,影片内容是微软在2011年所描绘的未来生活蓝图。在观看的过程中,请大家以「软件开发人员」的角度来思考,想想软件开发人员在其中扮演甚么样的角色。

而「软件在生活中将会无所不在」,这句话背后的意思,也就是说开发人员势必要能在:云端平台、移动平台、嵌入平台...等等异质平台上,具备跨平台开发应用程序的能力,才有机会在未来舞台上拥有一席之地。

接着,将视野拉回软件开发人员每天的工作冈位上。一直以来我的工作都是以C#做为主要的开发语言,在早期,以C#所开发出来的应用程序只能执行在PC平台上,随着WindowsPhone的诞生让.NET开发人员可以跨足到行动平台开发、接着XBOX的诞生让.NET开发人员可以跨足到游戏平台开发。.NET开发人员站在微软这个巨人的肩膀上,随着微软的脚步前进,慢慢扩展自己的开发版图。

而后续紧随着Windows10的出现,将所有PC平台、行动平台、游戏平台...等等平台整合封装为单一平台,减少跨平台开发应用程序时所需要越过的学习门坎,更进一步加快.NET开发人员扩展开发版图的脚步。

为了减少开发人员跨平台开发应用程序时的困扰,微软这个巨人迈出了它的一小步,为每个异质平台建立一层抽象的执行环境:CoreCLR。这个CoreCLR的解决方案,主要封装各种平台底层,提供开发人员统一的函式库、一致的执行环境,让开发人员能够使用同一种语言,来跨平台开发应用程序。另外,微软也透过策略伙伴所建置的Xamarin这个解决方案,提供开发人员能够使用同一种语言,来跨平台开发应用程序的用户接口。(Arduino、RaspberryPi的CoreCLR尚未获得官方证实)

微软透过提供CoreCLR、Xamarin这两个整合性的解决方案,减少跨平台开发应用程序时所需要越过的学习门坎,更进一步加快.NET开发人员扩展开发版图的脚步。至此,也真正的让.NET开发人员能够跨出微软的生态圈,开发任意平台之上的应用程序。从这个角度去看,我想这会是影响.NET开发人员职业生涯很重要的一大步。

微软为开发人员,铺平了跨平台开发应用程序的最后一哩路,让开发人员能够使用同一种语言,开发任意平台上的应用程序。接着就轮到开发人员接棒,要开始思考如何让应用程序能够跨平台执行。

以CoreCLR这个封装各种平台底层、提供一致执行环境的跨平台解决方案来说,因为种种硬件限制、平台特性的考虑,微软采用的设计方式是将原本完整的CLR,拆解出必要部分来做为CoreCLR的核心模块、其余部分则依平台特性来提供功能模块。这样做的好处,除了能够降低CoreCLR封装平台底层时的复杂度之外,也精简CoreCLR所占的内存大小,让CoreCLR能够适应于更多硬件等级不高的异质平台。但是,随之而来的坏处也很明显:哪些没有被纳入核心的功能模块不是所有平台都能使用。例如:提供剖析XML格式的函式库,可能被纳入功能模块,然后只有PC平台提供该模块,而嵌入平台不提供。这样在我们的程序使用剖析XML这个函式库的开发情景中,就会发生在嵌入平台上,因为没有提供对应的功能模块,所以造成应用程序无法执行的困境。

像这样被排除在CoreCLR核心模块之外的功能模块还有很多,开发人员可以从软件架构设计的层面切入,在规划软件架构的时候就切割与功能模块的相依性,让应用程序单单只依赖必要的核心模块。而在需要使用功能模块的功能时,则是套用依赖注入的模式,依照平台特性来注入平台所支持的功能模块,这样就能避免直接引用功能模块所带来的困扰。

接下来的内容,会以上述相同内容的角度来做说明,探讨如何从软件架构设计的层面切入,一步一步处理应用程序跨平台执行时,常会遇到的几个问题挑战、以及对应问题的解决方案。

一个跨平台执行的应用程序,可以选用3-Layer架构设计,做为应用程序的分层架构。3-Layer架构设计有着简洁、清晰、易懂...等优点,以此架构为核心延伸扩展去处理跨平台执行时所会遇到的各种问题挑战,这样可以大幅降低开发人员学习门坎,快速让团队里的每个开发人员都能发挥出实质战力。在3-Layer架构设计中将软件开发所产出的程序代码,依照不同用途归类为:系统表示层、领域逻辑层、数据存取层。其中:

透过套用这样的3-Layer架构设计,在开发过程中能够减少需要思考的设计内容,让开发人员一次只需要思考某个面向的设计内容。而在后续的维护过程中,也让开发人员能够分门别类的去理解既有的程序内容。

但是光只有3-Layer架构设计,并不足以提供应用程序跨平台执行的能力,因为每个平台所支持的执行档格式不尽相同:在PC平台上会以EXE档做为执行档、在Android需要将软件内容包装为APK文件才能交付客户使用,在RaspberryPi中则是需要透过刻录Binary档的方式才能执行。而在3-Layer架构设计中只定义了:使用接口、领域逻辑、数据存取...等等程序代码,如何归类至不同的层级,并没有定义该如何将应用程序封装为不同平台的执行档。

为了解决要依平台来编译执行档才能执行的问题,开发人员可以在分层架构中,加入额外的一层HostsLayer(程序执行层)。加入Host层后,所有可以被编译成为执行档的执行档项目,都会被归类在Host层之中,其余的系统表示层、领域逻辑层、数据存取层则是被归类为一般的函式库项目,而其中执行文件项目用来组合各种函式库项目,建立出不同平台的应用程序。透过这样切割执行档项目、函式库项目的方式,后续只要想在哪个平台上执行应用程序,就在Host层中加入一个对应平台的执行文件项目,接着组合函式库项目来进行编译、产生执行档,就能够提供该平台版本的应用程序,这也就提供了应用程序跨平台执行的能力。

每个平台所能支持使用的数据储存设备不尽相同:在移动平台上可以会选用SQLite作为储存设备、在云端平台上可能会选用AzureSQL做为储存设备、在嵌入平台上则可能选择EEPROM做为储存设备。当应用程序跨平台执行时,第一个会遇到的问题挑战就是:数据储存模块无法跨平台。

为了解决数据储存模块无法跨平台的问题,开发人员可以在架构设计的层级,套用IoC模式来切割应用程序与数据储存模块的之间相依性。套用IoC模式之后,应用程序就只相依于自己定义的数据存取接口,不再相依于特定平台的数据存取模块。接着只要在应用程序启动时,注入依照平台特性所实作的数据存取接口,就可以建立动态更换数据储存模块的功能,进而提供应用程序跨平台执行的能力。

参考数据:

为了解决依赖注入模块无法跨平台的问题,开发人员可以在架构设计的层级,选择套用Factory模式来取代依赖注入模块所提供的功能。套用Factory模式之后,应用程序就只相依于自己定义的功能模块工厂,不再相依于无法跨平台执行的依赖注入模块。虽然Factory模式只能生成加入项目参考的已知功能模块,但是一般的项目其实都还没有到达需要动态挂载功能模块的规模。所以透过Factory模式来生成注入对象,已经能够满足大部分项目的需求,并且提供应用程序跨平台执行的能力。

以一个加密User密码的应用程序来说,需要将用户输入的密码加密后传输到远程验证。当开发人员依照解决方案建立应用程序后,应用程序不需要引用外部的依赖注入模块,而只需要使用内建的加密模块工厂,生成系统所使用的加密规则模块,就可以让应用程序正常的提供软件功能。

每个平台所使用的用户界面框架不尽相同:在WindowsPhone中可以使用XAML来定义用户接口、在Android中使用XML来定义页面排版、在iPhone中则是使用StoryBoard来描述页面流程。当开发需要用户接口的跨平台应用程序时,最大的一个问题挑战就是:每个平台的用户接口框架都不同,应用程序无法跨平台执行。

为了解决用户接口框架无法跨平台的问题,开发人员可以在架构设计的阶段,直接选用Xamarin.Forms来做为PresentationLayer的用户接口框架。使用Xamarin.Forms做为用户接口框架之后,开发人员只需要依照Xamarin.Forms所定义的编码规则来撰写XAML档案。在应用程序执行的阶段,Xamarin.Form所内建RenderEngine就会将XAML档案内容渲染成为执行平台所能呈现的用户接口,直接提供应用程序跨平台执行的能力。

一个应用程序的开发,Log是一个不可或缺的功能。不管是做问题的追查、或是状态的分析,有了Log的辅助,让开发人员再发生问题的时候有迹可循。而这些提供Log功能的讯息纪录模块,开发人员可以选用.NET内建的EventLog、或者是第三方的Log4net...等等来使用。但是同样因为目前CoreCLR还算是在发展中的技术,所以上述这些常见的讯息纪录模块,还没有跟上这波的改变来更新版本,所以目前无法跨平台来使用。

为了解决讯息纪录模块无法跨平台的问题,开发人员可以在架构设计的层级,套用IoC模式来切割应用程序与讯息纪录模块的之间相依性,让应用程序只相依于自己定义的讯息纪录接口,并且为这个讯息纪录接口套用ServiceLocator模式来建立全局通用的对象参考。接着只要在应用程序启动时,生成依照平台特性所实作的讯息纪录接口,并且注入到全局通用的对象参考中,就可以完成动态更换讯息纪录模块的功能,进而提供应用程序跨平台纪录Log的能力。

讨论了几个应用程序跨平台执行时,常会遇到的问题挑战、以及对应的解决方案后,相信开发人员对于如何开发跨平台应用程序有个一定程度的了解。接着,请大家再看看上面这段影片,影片内容是微软预计要推出的产品:MicrosoftHoloLens。在观看的过程中,同样请大家以「软件开发人员」的角度来思考,想想软件开发人员在其中能扮演甚么样的角色。

第一次看这段影片的时候,微软这个主打3D扩增实境的产品:MicrosoftHoloLens,马上深深震撼了我的心。透过3D显示、加上扩增实境的功能组合,让现实与虚拟的界线变得模糊,开发人员完全能够在扩增实境中虚拟出各种输入输出设备,来提供使用者使用。这无形中,就打破了现今硬件输入输出方式固定、开发成本过高的限制,让软件的各种概念、发想不再被硬件所局限,只要你想得出来就能够实现。虽然我们还没有使用过MicrosoftHoloLens的实际成品,但是想象这个技术成熟的那一天,低头问问自己:「当硬件不再成为捆绑,软件你敢飞得多远」,相信每个人都能看到一个不同的世界。

最后,期许大家能够打破心的限制,设计出更多推动人类进步的软件。谢谢。

THE END
1.23种设计模式介绍设计模式(Design Patterns)是软件开发中经过验证的解决方案,它们提供了一种通用的方式解决常见的设计问题。通过使用设计模式,开发者可以提高代码的可读性、可维护性和可扩展性。1994年,Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著的《设计模式:可复用面向对象软件的基础》一书首次系统地介绍了23种https://blog.csdn.net/zhaoxilengfeng/article/details/144382870
2.软件架构三层结构图mob6454cc68310b的技术博客asp.net三层架构代码 aspnet三层架构结构图 接解asp.net已很久了,一直采用一个解决方案一个项目的方式去开发,所有的数据操作全放在一个类文件里,以为这就是所谓的三层结构,后来听说真正的大型网站的三层结构,应该是三个项目,或是更多的项目组成的,找网上找到N久的关于三层结构的教程,一直没有什么好的,可以入门的,https://blog.51cto.com/u_16099212/12797421
3.软件架构设计模式:从单体应用到微服务的演进策略详解软件架构设计模式:从单体应用到微服务的演进策略详解 一、引言 在当今的软件开发领域,随着业务的不断发展和需求的不断变化,单体应用架构已经不能满足日益增长的复杂需求。微服务架构作为一种新的解决方案,逐渐成为了各大企业关注的焦点。本文将对单体应用和微服务架构进行详细对比,并提出在实际应用中的演进策略。 https://www.jianshu.com/p/6035547eb228
4.软件架构设计软件架构风格是描述特定软件系统组织方式的惯用模式。组织方式描述了系统的组成构件和这些构件的组织方式;惯用模式则反映众多系统共有的结构和语义特性。强调对软件设计的重用。 架构风格定义一个系统家族,即一个架构定义一个词汇表和一组约束。词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连https://www.163.com/dy/article/GDGCECK505529XVP.html
5.架构设计常用到的10种设计模式,你都知道吗?企业规模的软件系统该如何设计呢?在开始写代码之前,我们需要选择一个合适的架构,这个架构将决定软件实施过程中的功能属性和质量属性。因此,了解软件设计中的不同架构模式对我们的软件设计会有较大的帮助。 软件架构模式 什么是架构模式?根据维基百科:架构模式是针对特定软件架构场景常见问题的通用、可重用解决方案。架构https://www.cloud.tencent.com/developer/news/470432
6.数字经济领域百问百答67.工业互联网平台基础共性能力要求包括哪些方面? 答:包括平台资源管理能力(工业设备管理、软件应用管理、用户与开发者管理、数据资源管理)、平台应用服务能力(存储计算服务、应用开发服务、平台间调用服务、安全防护服务、新技术应用服务)、平台基础技术能力(平台架构设计、平台关键技术)、平台投入产出能力(平台研发投入、https://www.zjk.gov.cn/content/bwbd/197999.html
7.企业私有云平台基础架构规划建设实践平台建设难点总结探讨最好以业务应用类型来驱动,例如,以微服务架构为基础设计的应用,就推荐使用云计算架构来满足其弹性伸缩的要求。 Q2: 企业云平台建设一共分几期?还是一部到位?云平台实施的方向? A2: 云平台很少有一步到位的,往往最开始的阶段是满足最基础的需求,例如计算虚拟化,存储虚拟化,然后网络虚拟化,然后容器,监控,大数据,编https://redhat.talkwithtrend.com/Article/217841
8.标签系列:标签管理平台的架构与设计数据Taylor有了对平台架构的整体认知之后,接下来就从产品设计角度,从标签的管理,生产,分析,应用四个方面聊聊下标签平台的常见功能与设计。 标签平台的产品设计 管理 包含了统一的对接入数据源的管理,围绕标签生命周期的管理,和作为平台通用的那些功能设计。 数据源管理 https://xie.infoq.cn/article/75059aca4fe6a85a12557b2a9
9.前端低代码平台架构介绍低代码前端开发框架为了充分发挥低代码开发在前端架构中的优势,我们可以采取以下策略:首先,深入了解项目的需求和特点,明确哪些部分适合使用低代码开发,哪些部分需要采用传统开发方式。其次,在选择低代码平台时,我们需要关注其组件库的丰富程度、自定义能力的强弱以及平台的稳定性和安全性。最后,我们需要保持对底层技术的关注和学习,不断提升https://www.bnocode.com/article/low-code-front-end-architecture.html
10.字节跳动一站式数据治理解决方案及平台架构文章上面介绍了我们应对数据治理的解决方案,包括全规则、全链路和一站式,接下来介绍具体的平台架构。 整体架构 首先在整体的架构部分,这是治理平台内整体的架构图。 其中灰色的部分是在平台透出给用户的产品能力,包括治理全景。治理全景对应于刚才在一站式的视图层能够告诉用户,有哪些资产,这些资产的情况是怎么样的。然后https://developer.volcengine.com/articles/7316453574492782642
11.10种常见的软件架构模式·微服务架构·看云架构模式是一个通用的、可重用的解决方案,用于在给定上下文中的软件体系结构中经常出现的问题。 架构模式与软件设计模式类似,但具有更广泛的范围。 在本文中,将简要地解释以下10种常见的体系架构模式,以及它们的用法、优缺点。 分层模式 客户端-服务器模式 https://www.kancloud.cn/architect-jdxia/architect/521056
12.如何做好整车开发的平台与架构?而在制造方面,当采用平台战略时,由于采用共用件策略,所以制造方式也必然是相同的。在扩展到架构策略时,虽然某些零部件已有所不同,但在相同工程解决方案的基础上,也有可能确定相同的制造方式或找到可以互换的制造方式,这就是所谓的模块化设计和制造。因此,所谓架构,实际上就是相同的工程解决方案和模块化制造工艺的综合http://www.360doc.com/content/21/0126/08/46573964_958971988.shtml
13.如何搭建全平台营销活动产品架构编辑导语:本文从平台性的营销活动切入,介绍了需求分析、产品设计架构思路和详细的单一活动模型设计,帮助大家熟悉底层逻辑,掌握核心要义,在产品初期就能够考虑到未来的扩展性、全面性,具有强势的扩展能力。 双十一大促,我们最关注的就是各家电商平台有哪些营销活动,哪些折扣的方式能够让在必须消费的前期下省钱到最低。甚https://supplier.alibaba.com/article/CTG0OO4P03O.htm
14.美好家长:打造有温度的教育共同体美好教育在上城热点专题课程架构中的内容遵循学生的发展核心,把家长和儿童的需求作为课程设计的出发点和落脚点,满足家长个性化、多样化终身学习的需求,注重解决家长教育中的突出问题,创新家庭教育指导方式,为家长提供多元、有针对性的指导服务。 2.家长课程内容精心选择 课程内容按照划分的四个年龄段,围绕十个核心问题进行内容的设计。学龄前https://z.hangzhou.com.cn/2019/mhjyzsc/content/content_7126138_0.html
15.常见的系统架构模式有哪些?详解8大系统架构设计哲学设计不仅仅指的是外观和感觉,它还包括运作方式。——史蒂夫·乔布斯 系统架构(System Architecture)、软件架构(Soft Architecture)是IT领域常见的名词,架构设计是软件系统构建过程中极其关键的一部分。 系统架构为什么重要?常见的架构模式都有哪些?本文将带你了解不同的架构设计所运用的不同设计哲学。 https://baidu-mip.xianjichina.com/news/details_254901.html
16.基于FPGA的实时图像处理实验平台设计AET本文介绍了一种采用CMOS摄像头作为视频源输入,SDRAM作为帧缓冲器,FPGA作为主控器和图像处理模块,ADV7123作为视频D/A转换器,UART和VGA作为输入输出接口的系统设计方案,对相关设计人员具有一定的参考价值。 1 实时图像处理实验平台架构 本系统由视频采集模块、帧缓存模块(处理前)、图像处理模块、帧缓存模块(处理后)、http://www.chinaaet.com/article/3000002969
17.全面易懂!写给新手的信息架构设计指南优设网简单来说,信息架构设计就是让用户可以 容易地理解你的产品是怎样的。让他们在使用你产品的时候可以更顺利更自然。就像一进入饭店就会有一种感觉,门口是等餐的地方,进去就应该吃饭,如果找洗手间一定不会往门口走,而会往深处走。这就是信息架构的好处:他让用户使用同类产品时更容易上手和理解,让产品更容易被接受。https://www.uisdc.com/information-architecture-design-guide
18.培训报告(通用13篇)本着“围绕打造本质安全型企业”的主题要求,利用职工班前班后会、安全文化建设、安全教育培训等方式方法,把安全教育主题活动和“以人为本”的理念落实到安全生产每一个环节,对职工安全意识的动态把握和对安全隐患的超前防控,使生产活动中危及劳动者生命安全、身体健康的各种事故风险和伤害因素,始终处于有效认知、动态。https://www.liuxue86.com/a/4986923.html