微软把UWP定位成业务线应用程序开发平台

微软把UWP定位成传统业务线(LOB)应用程序开发平台,以使用Windows Template Studio实现快速应用程序开发为重点。但是,为了把LOB开发人员吸引到UWP平台,他们在做的事情不止这些。

最初发布时,通用Windows平台(UWP)只是被视为一种在Windows商店中销售应用程序的方法。其基本思想是你编写一次应用程序,它就可以在Windows和Windows Phone上运行。但是有严格的限制,你几乎是必须通过Windows商店。对业务线(LOB)应用程序而言,这就不合适了,因为它们天生就不应该公开暴露。

借助UWP,LOB开发人员要么继续使用遗留的WinForms和WPF平台,通常是使用ClickOnce作为部署方法,要么接受内部Web站点额外的复杂度和开发成本。对于中大型企业,这个方向尤其流行,WinForms/WPF更高的部署成本是一个因素。

随着去年“Windows 10 Fall Creators Update”的发布,UWP模型发生了变化,它使得直接通过网站安装UWP应用程序成为可能。虽然和ClickOne的体验不完全一样,但至少是个开始。同时,微软有一个团队致力于使XAML/UWP更适用于LOB应用程序。

Windows UI库

用户控件是任何UI框架的核心。强大的用户控件模型促成了Visual Basic在20世纪90年代的流行,并且仍然使桌面应用程序的开发速度高于基于HTML的解决方案。但是,UWP部署模型给它带来了一些不必要的限制。

由于主要的用户控件(又名平台控件)已经变成了OS的一部分,所以,应用程序在采用新控件时必须非常保守。有些公司的机器虽然运行着Windows 10,但其版本经常比正式发布的版本落后两个版本,这时候问题会尤为突出。

为了解决这个问题,平台控件现在作为NuGet包发布。这使得开发人员可以利用新控件,而不必等待公司的其他部门都升级到最新的Windows版本。这些NuGet包至少需要2016年8月发布的Windows周年纪念版。

这些控件填补了UWP生态系统中众所周知的空白,如缺少tree-view、菜单栏或颜色选择板。

.NET Standard

借助.NET Framework和.NET Core,UWP现在支持.NET Standard 2.0。这使得开发人员可以把他们的业务逻辑和数据模型迁移到.NET Standard库。那样,他们就可以在传统的桌面应用程序、网站或UWP应用之间共享同样的代码。理论上讲,这将简化从WinForms/WPF到UWP的迁移。

UI密度

微软把UWP中的默认空间和大小描述为“慷慨提供了大量空白”。计划在今年发布的Windows版本将改变这种默认情况,通过自动减少控件尺寸、控件之间的填充空间、字体大小,释放更多屏幕实际使用面积,一般来说,就是让一切更紧凑。按照他们的估计,你可以把屏幕上的控件数量增加约三分之一。

开发人员可以通过选择简洁模式进一步缩小控件的尺寸。控件之间的空间减少了大约40%,一次可以看到的数据增加了大约50%。这项特性主要是针对数据密集型的业务线应用程序。

颜色主题

众所周知,一个令人愉快的颜色主题会增加用户对工具的信任。但是,对于像UWP/XAML这样复杂的样式模式,通常甚至没有时间应用最基本的颜色。基本上,问题在于,每种控件类型的样式都需要单独更新,然后再测试整个主题。在构建业务线应用程序时,很少有足够的时间这样做。

有一款新工具,姑且称之为“Color Demo”,就是要解决这个问题。使用简单的颜色选择器,就可以预览主题,生成必要的资源字典,包含到应用程序中。

而且,它会提示你颜色选择可能导致的问题,如没有足够的对比度使文本可读。

这还不如全样式的XAML应用程序丰富,但是,它可以为应用程序提供足够的修饰,使它看上去有一个专业的外观。

数据验证UI

UWP还有另外一个明显的不足,就是缺少数据验证支持。这个疏忽很奇怪,因为数据验证从一开始就是.NET UI框架的一部分。(我们在文章“C# API中的模型和它们的接口设计”中讨论过其中部分接口)。

今年新增的功能是在基于属性的验证中使用INotifyDataErrorInfo接口。当一个模型暴露了这个接口,UI就能够自动显示正确的错误信息。它显示错误的具体方式取决于你在控件中选择了哪个模式。

实现INotifyDataErrorInfo接口并不简单,涉及许多把基于属性的验证附加到INotifyDataErrorInfo接口的样板代码。因此,你也许会希望找一个MVVM框架来帮你处理。[本文作者的Tortuga Anchor库就是这样一个例子。]

新XAML控件:Data Grid

对于非UWP开发人员,没有提供开箱即用的Data Grid看上去相当奇怪。

对于业务线开发人员,UI框架不提供Data Grid几乎是不可想象的。甚至是早在上世纪90年代中期,这个控件的一个变体就已经成为无数业务应用程序的核心。许多在考虑UWP的开发人员惊讶地发现,微软已经从WPF或Silverlight移植了Data Grid。

这最终是通过Windows Community Toolkit解决的。新的DataGrid控件所需要的XAML看上去和在WPF中非常像。

下周,我们将深入介绍Windows Community Toolkit。

原文地址:http://www.infoq.com/cn/news/2018/08/UWP-LOB-Win10


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320383.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

读 《CSharp Coding Guidelines》有感

C# 编程指南前不久在 Github 上看见了一位大牛创建一个仓库:CSharpCodingGuidelines,打开之后看了一下 readme.md 相关描述,感觉应该很不错,于是就 clone 到本地拜读一下,这里列一些自己的笔记,方便日后回顾…

牛客网 【每日一题】4月10日 二分图染色(弱化版)

精讲 组合、容斥 文章目录题目:题意&&题解::代码:题目传送题目: 时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 524288K,其他语言1048576K 64bit IO Format: %lld …

微软Windows Community Toolkit一览

为了满足业务线开发人员的需求,微软推出了Windows Community Toolkit。这个快速变化的库充当了新的UWP控件和功能的测试基础。在创建UWP之初,其重点目标是智能手机和平板电脑。这意味着大部分开发预算都花费在控件上,确保这些控件能够在有限的…

如何简单的在 ASP.NET Core 中集成 JWT 认证?

前情提要:ASP.NET Core 使用 JWT 搭建分布式无状态身份验证系统文章超长预警(1万字以上),不想看全部实现过程的同学可以直接跳转到末尾查看成果或者一键安装相关的 nuget 包自上一篇介绍如何在 ASP.NET Core 中集成 JWT 的博文发布…

【二分】【暴力】蛋糕(gmoj 3918)

蛋糕 gmoj 3918 题目大意: 有一个蛋糕,分成n∗mn*mn∗m个单位,现在横竖各切三刀,使其分成16个矩阵,使价值最小的矩阵价值最大 输出样例 5 5 95998 21945 23451 99798 74083输入样例 3数据范围 40%的数据&#x…

Music Problem

文章目录题目描述题意:题解:传送时间限制:C/C 2秒,其他语言4秒 空间限制:C/C 131072K,其他语言262144K 64bit IO Format: %lld 题目描述 Listening to the music is relax, but for obsessive(强迫症), it …

可扩展架构设计的三个维度

业界对于可扩展的系统架构设计有一个朴素的理念,就是:通过加机器就可以解决容量和可用性问题这一理念在“云计算”概念疯狂流行的今天,得到了广泛的认可!对于一个规模迅速增长的系统而言,容量和性能问题当然是首当其冲的。但是随着…

.NET Core开发日志——简述路由

有过ASP.NET或其它现代Web框架开发经历的开发者对路由这一名字应该不陌生。如果要用一句话解释什么是路由,可以这样形容:通过对URL的解析,指定相应的处理程序。回忆下在Web Forms应用程序中使用路由的方式:然后是MVC应用程序&…

博客开通

开通博客第一天,纪念一下——

.NetCore Cap 结合 RabbitMQ 实现消息订阅

开源分布式消息框架 Cap 可以在GitHub上拉也可以通过nuget添加上一篇博文写了 Windows RabbitMQ的安装使用 Cap支持事务,通过捕获数据库上下文连接对象实现 消息事务,消息持久化怎么来实现消息订阅 消费?使用起来非常简单,主要通过…

小H和游戏

文章目录题目描述题解:传送时间限制:C/C 2秒,其他语言4秒 空间限制:C/C 262144K,其他语言524288K 64bit IO Format:%lld 题目描述 小H正在玩一个战略类游戏,她可以操纵己方的飞机对敌国的N座城市(编号为1~N…

asp.net core 发布到 docker 容器时文件体积过大及服务端口的配置疑问

在 asp.net core 发布时,本人先后产生了3个疑问。1、发布的程序为什么不能在docker容器中运行当时在window开发环境中发布后,dotnet xxx.dll可以正常运行;但放入docker容器后就报 *.*.deps.json not found 的错误。后根据下面的文章解决了问题…

水题(water)(非详细解答)

传送 时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 其中,f(1)1;f(2)1;Z皇后的方案数:即在ZZ的棋盘上放置Z个皇后,使其互不攻击的方案数。…

网络流小结

最大流&#xff1a; EK算法&#xff1a; #include<iostream> #include<cstring> #include<cstdio> #include<queue> using namespace std; const int inf0x7fffffff; const int maxn10010; struct node{int u,v,f,next; }edge[300050]; int s,t,cnt,…

.NET MVC CSRF/XSRF 漏洞

最近我跟一个漏洞还有一群阿三干起来了……背景&#xff1a;我的客户是一个世界知名的药企&#xff0c;最近这个客户上台了一位阿三管理者&#xff0c;这个货上线第一个事儿就是要把现有的软件供应商重新洗牌一遍。由于我们的客户关系维护的非常好&#xff0c;直接对口人提前透…

jzoj5057-[GDSOI2017模拟4.13]炮塔【网络流,最大权闭合图】

正题 题面链接:https://gmoj.net/senior/#main/show/5057 题目大意 n∗mn*mn∗m的网格上有一些炮和敌军&#xff0c;每个炮可以攻击在它方向上一个敌军&#xff0c;但是要求炮弹的轨迹不能交叉。求最多打死多少敌军。 解题思路 我们先把炮分成两类&#xff0c;一类是横着打&a…

讲一下Asp.net core MVC2.1 里面的 ApiControllerAttribute

正文ASP.NET Core MVC 2.1 特意为构建 HTTP API 提供了一些小特性&#xff0c;今天主角就是 ApiControllerAttribute。0. ApiControllerAttribute 继承自 ControllerAttributeASP.NET Core MVC 已经有了ControllerAttribute&#xff0c;这个用来标注一个类型是否是Controller。…

新的UWP和Win32应用程序分发模型

自2005年引入ClickOnce技术以来&#xff0c;.NET就支持应用程序自动升级。在ClickOnce模型中&#xff0c;WinForms和WPF应用程序在启动时会从预先配置好的位置查找新版本。但是&#xff0c;由于微软试图模仿iOS应用商店模型&#xff0c;所以&#xff0c;该模型未能延续到UWP。微…

.net core grpc 实现通信(一)

现在系统都服务化&#xff0c;.net core 实现服务化的方式有很多&#xff0c;我们通过grpc实现客户端、服务端通信。grpc(https://grpc.io/)是google发布的一个开源、高性能、通用RPC&#xff08;Remote Procedure Call&#xff09;框架&#xff0c;使用HTTP/2协议&#xff0c;…

子序列

牛客网题目 题目描述 给出一个长度为n的序列&#xff0c;你需要计算出所有长度为k的子序列中&#xff0c;除最大最小数之外所有数的乘积相乘的结果 输入描述: 第一行一个整数T&#xff0c;表示数据组数。 对于每组数据&#xff0c;第一行两个整数N&#xff0c;k&#xff0c;含义…