15.2 XAF 有什么新功能





5.00/5 (5投票s)
15.2 版本为 XAF (win) 开发者带来了什么?
引言
作为一名有着 15 年以上经验的活跃开发者,我见证了不少框架的兴衰,每个框架都有其优缺点……几年前,我有机会在一个决定从 Delphi 迁移到 .NET 的公司中引入 .NET。
虽然我意识到这是一项艰巨的任务,但我知道我该往哪里去。XAF 为我提供了许多功能和开箱即用的功能,让我事半功倍。多年的持续改进,让我们迎来了今天的 15.2 版本。
让我们来看看 15.2 版本为我们准备了什么。
关注领域
鉴于我目前参与的项目性质,主要关注点将是 Winforms 和 EF,但也有一些针对 Web 应用程序的改进值得一提。
有什么新内容
ASP.NET Maps 模块
新的 Maps 模块允许我们在地图上可视化任何数据。
所以,如果我想展示全球门店的收入,或者在地图上标出其位置?Maps 模块将能够帮助你。
只需要写一小段代码即可自定义底层的 dxMap
;
using DevExpress.Persistent.Base;
namespace DevExpress.ExpressApp.Maps.Web.Controllers {
public class MapCenterController : ObjectViewController<ListView, Store> {
protected override void OnViewControlsCreated() {
base.OnViewControlsCreated();
((WebMapsListEditor)View.Editor).MapViewer.ClientSideEvents.Customize = GetCustomizeScript();
}
private string GetCustomizeScript() {
return @"function(sender, map) {
map.option('center', 'Brooklyn Bridge,New York,NY');
map.option('autoAdjust', false);
}";
}
}
}
验证模块 (Win + Web)
内置验证一直是 XAF 的一个强项,很少有场景是内置功能无法覆盖的。直到 15.1 版本,验证是在保存更改时触发,或者在按下验证按钮时手动触发。在 15.2 版本中,对于一部分验证规则,验证会在输入焦点改变后立即发生。这里重要的是,即时验证的规则不需要从服务器收集任何额外数据。
以下规则可用于即时验证
要求 Property
有值。
通过正则表达式验证值。
通过 string
值比较(Contains
, EndsWith
, Equals
, NotEquals
, StartsWith
)验证值。
比较例如 date
或 int
属性的值(Equals
, GreaterThan
, GreaterThanOrEqual
, LessThan
, LessThanOrEqual
, NotEquals
)
检查值是否在指定范围内。
即时验证会在属性不符合其规则时弹出红色的错误图标。
详细视图布局
一如既往,有一些更新有助于整体发展。
我们中的许多人更喜欢使用设计器(Model Editor),但也有人更喜欢在代码中进行……从现在开始,可以通过 DetailViewLayout
属性在代码中使用修改详细视图。
就像这样简单
public class Contact {
[Browsable(false)]
public int ID { get; private set; }
[DetailViewLayoutAttribute(LayoutColumnPosition.Left)]
public string FirstName { get; set; }
[DetailViewLayoutAttribute(LayoutColumnPosition.Right)]
public string LastName { get; set; }
[DetailViewLayoutAttribute("FullName", 0)]
public string FullName { get { return FirstName + " " + LastName; } }
[DetailViewLayoutAttribute(LayoutColumnPosition.Left)]
public string Email { get; set; }
[DetailViewLayoutAttribute(LayoutColumnPosition.Right)]
public virtual Contact Manager { get; set; }
[DetailViewLayoutAttribute(LayoutColumnPosition.Left)]
public DateTime? Birthday { get; set; }
[FieldSize(FieldSizeAttribute.Unlimited)]
[DetailViewLayoutAttribute("NotesAndRemarks", LayoutGroupType.TabbedGroup, 100)]
public string Notes { get; set; }
[FieldSize(FieldSizeAttribute.Unlimited)]
[DetailViewLayoutAttribute("NotesAndRemarks", LayoutGroupType.TabbedGroup, 100)]
public string Remarks { get; set; }
}
重置视图设置
使用 XAF 的一个好处是为最终用户提供了自定义视图和布局的选项。从现在起,用户只需单击一个按钮即可恢复到默认设置。
填补差距
虽然 XAF 最初只支持 Xpo(DevExpress ORM),但现在也支持 EF,在我看来,差距正在迅速缩小…… :-)
15.2 版本中的众多改进之一就是对此的一个很好的例子。
作为例子,我们将看看如何使用 ObjectSpace
进行查询。
在 15.2 版本之前,如果我们想使用 LINQ,我们需要这样做:
ObjectQuery<Payment> query =
((EFObjectSpace)View.ObjectSpace).ObjectContext.CreateQuery<Payment>("Payments");
object obj = query.Where<Payment>(p => p.Hours == 4).FirstOrDefault();
使用 Xpo 时,我们可以做到:
XPQuery<Payment> query = Session.DefaultSession.Query<Payment>();
object obj = query.Where(p => p.Hours == 4).FirstOrDefault();
两种不同的方法,但结果相似。
从 15.2 版本开始,这已在 IOjbectSpace
接口中实现,因此 Xpo 和 EF 可以使用相同的方法。
var query = ObjectSpace.GetObjectsQuery<Payment>();
object obj = query.Where(p => p.Hours == 4).FirstOrDefault();
对许多人来说,这可能不是什么大事,但对我来说,这很重要…… KISS(保持简单,愚蠢)。
UX Web 增强功能
在 15.1 版本中,模板已针对触摸支持进行了优化,在 15.2 版本中,这些功能得到了改进,并已准备好在生产环境中使用。
目前还没有真正使用它,但你可以阅读所有相关信息 在这里。以下截图也很好地说明了它的内容。
为什么选择 DevExpress?
如果你想知道为什么 DevExpress 能在我的项目中产生不同,让我用一个简单的例子来解释。
在我开始最后一个大型 XAF 项目时,EF 还没有像现在这样得到支持,但是有了出色的 DevExpress 支持,我能够将我们的遗留数据库集成到 XAF 框架中。Xaf 不支持多个数据库,因此我向他们提出了我的需求,不久之后,解决方案(见下图)被实施,并附有一篇博客文章,你可以在 这里 阅读。
总结
本技巧主要关注 XAF,DevExpress 15.2 Universal 还有更多内容提供给我们。我非常喜欢写这个技巧,希望你觉得它有用!如果觉得没用,请告诉我!