博客
关于我
.NET之全平台一体化的体验
阅读量:442 次
发布时间:2019-03-06

本文共 1319 字,大约阅读时间需要 4 分钟。

一、前言

最近利用空闲时间研究了一番Xamarin技术,发现其提供的支持非常到位,因此决定尝试全面的开发,目标是实现“进可攻,退可守”。

全平台开发的概念是指开发的APP能够在Android、iOS、WP等移动端运行,同时又能在Windows和Linux等桌面端运行。这种开发模式的优势在于既能覆盖多个平台,又能灵活应对不同环境的需求。

二、简单实现

为了展示项目的基本实现情况,以下将通过文字描述截图内容。目前,我的开发工作主要集中在Android平台上,而iOS平台由于缺乏实际设备,暂时无法进行测试。至于UWP(Universal Windows Platform),由于设备升级到Windows 10 10568版本的问题,目前也无法实时调试,计划在未来阶段补上开发。

需要注意的是,标题中的“全平台”并非完全覆盖所有平台,但通过合理选择和配置,确实可以实现跨平台的开发需求,这并非虚构的夸张,而是真实可行的实现方案。

三、进可攻,退可守

“进可攻”主要体现在Web端的开发上。在Linux环境下,我采用Jexus(免安装Mono版)和TinyFox来部署后台网站和数据服务。虽然初衷上曾考虑使用ASP.NET Core,但由于一时难以适应,因此暂时搁置了这一选择。

“退可守”则体现在Windows Server的IIS部署上。需要强调的是,我的开发环境中并未安装Mono,这一点可能会让一些观众感到意外,但这正是实现跨平台开发的关键所在。

四、项目结构与细节

项目目前包含14个子项目,分布在5个项目文件夹中,包括多个测试项目。详细项目结构如下:

  • 01-APP:用于开发移动端应用,目前仅支持Android。
  • 02-Website:后台管理网站,基于NancyFX框架,使用自带的Forms Authentication进行身份验证。
  • 03-DataService:用于提供数据服务的接口,目前开发了两套解决方案,一套基于MVC框架,另一套基于NancyFX(使用OWIN)。
  • 04-Core:数据访问和模型层,采用Dapper进行数据库操作。
  • 05-Logic:业务逻辑层,主要包含Nancy和应用程序的基本使用方法,相关内容可参考我的前期博客。

此外,项目中还包含多个测试项目,使用xUnit进行测试,但目前前三个项目文件夹的测试尚未完成,UI测试的工作也处于探索阶段。

五、测试与学习

在此过程中,我对测试工具有了一番了解,了解到Evolve 2016上展示的Test Cloud Live功能非常有趣。然而,目前找不到相关资料,只能通过邮件联系相关人员,得到了以下回复:“请关注我们的博客,稍后会对所有人开放Test Cloud Live功能。”这让人既期待又有点失望。

六、运行图示

以下是部分项目的运行界面,虽然界面设计较为简陋,但功能已经基本实现。下方是Android端的界面,上方是基于Jexus 5.8.1.3在Linux环境下运行的Web端。

结语

目前项目仍处于开发初期,存在许多待解决的问题和bug。源码目前尚未上传到github,计划在6月底或7月初进行发布。之后将定期更新项目进展,并分享开发心得。

转载地址:http://oexkz.baihongyu.com/

你可能感兴趣的文章
Python:subprocess.call,stdout to file,stderr to file,在屏幕上实时显示stderr
查看>>
Python:TypeError:无法连接“str“和“int“对象
查看>>
Python:XPath 在 ElementTree 中不可用
查看>>
Python:从 FTP 服务器下载文件
查看>>
python:从列表中创建元组列表
查看>>
Python:从嵌套列表中删除重复项
查看>>
Python:从间隔映射到值
查看>>
Python:使用 shell=False 的子进程调用不起作用
查看>>
Python:修改 PATH 环境变量的平台无关方式
查看>>
Python:假与 0
查看>>
Python:函数使用
查看>>
Python:函数进阶
查看>>
Python:在整数的二进制表示中查找最长的二进制间隙
查看>>
Python:如何从二进制转换为 base 64 并返回?
查看>>
Python:如何以非阻塞方式读取子进程的标准输出
查看>>
Python:如何使用 plotly 制作阴影区域或交替背景颜色?
查看>>
Python:如何根据日期时间获取值的计数
查看>>
python:如何检测串行 COM 上的设备名称/ID
查看>>
Python:如何模拟 datetime.utcnow()?
查看>>
Python:如果DataFrames之间的其他值匹配,则对DataFrame中的值求和
查看>>