随笔分类 -  工作相关

工作中遇到的一些问题。
摘要:在使用 WCF 时,为了更好地进行调试,我都选择了 HTTP 协议进行数据传输。最近项目对性能要求比较高,所以就换成了使用 TCP 协议。并对二者的性能进行了一个简单的测试。以下是测试结果: 环境: CPU: E5800 3.20GHz+3.19GHz RAM: 7.97GB 64 bit OS, 阅读全文
posted @ 2013-06-28 15:58 BloodyAngel 阅读(9013) 评论(0) 推荐(1) 编辑
摘要:本文将定义一个 WCF 终结点行为扩展,以在 WCF 中使用更高效的 BinaryFormatter 进行二进制序列化,并实现对是否使用传统二进制序列化功能的可配置。 介绍 实现步骤 使用方法 效果 介绍 在 OEA 框架中,是使用 WCF 作为数据传输框架。但是使用 WCF 内部的二进制序列化,序 阅读全文
posted @ 2013-06-24 18:19 BloodyAngel 阅读(4355) 评论(1) 推荐(2) 编辑
摘要:为什么要重构 上两个月主要做了一件事情,那就是把 OEA 框架中的 TreeGrid 控件,从结构上重新设计,并大量重构现有代码。而花较大精力做这件事的原因,主要是因为: 业务中需要支持一系列新功能:整行编辑、上下箭头键进行导航、合计行、锁定列 等。 控件显示性能较差,需要支持列虚拟化。 和 OEA 元数据系统耦合,希望独立为单独的控件程序集,提高复用性。 不支持 xaml 声明的格式。原控件直接在后台用 OEA 代码生成,本质上作为一个 WinForm 控件来用。 整个 TreeGrid 控件混合了三个控件代码而成,包括:GridView... 阅读全文
posted @ 2012-11-14 16:20 BloodyAngel 阅读(2345) 评论(7) 推荐(2) 编辑
摘要:最近用 OEA 做的仓库管理系统中,许多界面的都需要使用表格控件来显示数据。一是这些表格的列非常多,有的甚至达到了 200 列,而且一个模块的界面中可能同时显示好几个表格。这导致界面的速度比较慢,特别是较多数据需要展现时。经检测,表现虽然表格的行已经做了虚拟化,但是由于列非常多,最终还是造成可视树中的元素过多,而导致界面布局代码运行过慢。假设只有 30 行,一个单元格仅生成 5 个可视元素,200 列的单元格都会产生 3W 个可视元素,而布局系统的 Measure 方法需要对可视树中的每一个元素都调用其对应的 Measure 方法,可以想象,这当然会很慢。 那么,要解决上述的问题,只有... 阅读全文
posted @ 2012-10-24 15:53 BloodyAngel 阅读(4852) 评论(2) 推荐(2) 编辑
摘要:之前 OEA 一直用着一个 Delphi 开发的报表,所以两年来我一直就想在 OEA 中构建一个纯 .NET 的报表模块,但是一想到要开发复杂的报表引擎和设计器就觉得麻烦。所以这事一直拖着。最近开始研究一些成熟的报表引擎,经过对比,还是发现微软的 RLDC 报表已经能满足我大多数需求。其中包括表格、矩阵、图表 等复杂控件,同时同样的报表格式在 B/S 模式下也可以直接使用,最新的 Tablix 控件非常灵活,能实现大多数表格样式。所以我决定不再费时费力去造一个轮子,而是直接把微软的 RDLC 报表集成进来。最终集成到 OEA 中,只花了不到一周的时间。虽然现在还处在第一版,没有给客户使用的设计 阅读全文
posted @ 2012-09-07 16:15 BloodyAngel 阅读(2679) 评论(9) 推荐(2) 编辑
摘要:OEA 框架提供了多种方式来优化分布式数据查询的性能,本篇将会说明如何以声明 OEA 冗余属性的方式,来实现轻量级的数据冗余,以减少关联查询次数及网络数据传输量,提高分布式应用程序性能。 冗余属性功能说明 OEA 冗余属性在框架层面提供了一种易用的机制,把指定冗余路径的关系对象中的属性值复制到本对象中,以解决关联查询、关联数据量等性能问题。应用开发人员只需要简单的定义一个冗余属性,而... 阅读全文
posted @ 2012-08-10 20:37 BloodyAngel 阅读(2007) 评论(2) 推荐(1) 编辑
摘要:WPF 是一个界面层框架技术,要对 WPF 技术达到熟练运用的程度,需要同时拥有开发和设计两方面的知识。而我作为一名开发人员,以前的总结都是站在开发人员的角度,今天这篇博文则期望更多地站在设计人员的角度来进行总结。其实,开发人员比较难理解WPF 框架中为什么会提出 Style、Template、Command、State、StoryBoard、Trigger 等这些概念,但是当你看一看 Flash 或者 PhotoShop 的设计人员平时的工作,就会发现原来许多概念早已是他们的常识,而 .NET 只是把这些概念在 WPF 框架上加以实现而已。 最近接了一个 WPF 的活,对方要求我按照他们美工 阅读全文
posted @ 2012-07-29 18:09 BloodyAngel 阅读(8708) 评论(14) 推荐(10) 编辑
摘要:在 OEA 平台 设计中,需要支持多种数据库,这至少包括了 SqlServer、Oracle、一个单机文件数据库。而之前对于这一块,我们一直没有实现,只是预留了许多接口。昨天花费了一天的时间,让 OEA 支持了本地数据库 SQLCE。 为什么要支持本地数据库呢? 支持开发简单的本地软件。 偶尔需要一些比较小的应用程序,例如“个人计帐管理”、“个人联系方式管理”等。这些... 阅读全文
posted @ 2012-04-25 13:08 BloodyAngel 阅读(5156) 评论(5) 推荐(5) 编辑
摘要:简要说明 OEA 1.0-2.0 框架中,界面都是以 WPF 技术作为基础平台开发的。我们需要对开发出来的系统进行自动化测试,而 .NET 平台的自动化测试平台在公司内部还没有其它部门完成,所以我们在 2010 年的时候使用 Ruby + VS UIUnitTest 开发了一个 UI 自动化(UI 阅读全文
posted @ 2012-02-14 16:33 BloodyAngel 阅读(9616) 评论(8) 推荐(4) 编辑
摘要:11年11月我主要对 OEA 框架中 WPF 自动界面生成模块中多类型树型表格控件进行重构,并同时支持更多的功能。这样,整个 OEA 就不再使用 DataGrid,结束了 DataGrid 与树型表格控件混用的情况。 树型表格、一般表格统一为一个控件: 另外,附上对重构前的控件类结构设计分析图: 阅读全文
posted @ 2012-01-19 15:24 BloodyAngel 阅读(547) 评论(0) 推荐(1) 编辑
摘要:这篇设计文档是 12 月份写来参加公司的研发峰会的,自己倒是信心满满,不过最后还是没有入围。现在想想也没啥大用,所以贴出来,期待与园友交流。 文档有点长,没全部贴在博客中,有兴趣的可以下载附件中的 PDF。附件:《实体扩展属性系统-系统设计说明书.pdf》================= 分隔线 ======================目录 前言... 4 1 背景与需求... 5 1.1 产品 721 客户化开发的需要... 5 1.2 实体动态列... 6 1.3 分离只读/视图属性... 6 1.4 提升框架性能... 6 1.5 支持 WPF 绑定... 6 1.6 其它需求.. 阅读全文
posted @ 2012-01-11 21:10 BloodyAngel 阅读(5378) 评论(8) 推荐(4) 编辑
摘要:本篇博客主要说明如何使用 UI Virtualization(以下简称为 UIV) 来提升 OEA 框架中 TreeGrid 控件的性能,同时,给出了一些学习 UIV 的资源。问题 最近对 OEA 的 TreeGrid 控件进行了比较大的改造,并使用新的控件来替换了系统中所有的 DataGrid 控件。新的 TreeGrid 控件实现了很多新的功能,(之后会写一篇文章说明),但是最后遗留了一个问题:由于使用它替换了原来的 DataGrid,而 DataGrid 默认是支持 UI Virtualization 的,当有些界面的数据量比较大时,没有支持 UIV 的TreeGrid 控件就显得有些. 阅读全文
posted @ 2011-12-12 00:14 BloodyAngel 阅读(10546) 评论(7) 推荐(12) 编辑
摘要:时间有限,简单快速的完成本篇博客……(很多问题在此就不细说清楚了,主要还是记录一下成果。) * 先是整个子系统要完成的需求列表: * 然后是对它的分析,以及整个逻辑方案的结构。 图中的“概要”部分同时说明了静态结构和运行时时期的划分。 * 以及,这样的结构,如何实现整个需求的描述: * 逻辑方案中的静态结构,主要还是看以下的类图设计: 第一张,自然是托管属性本身的结构设计。当时只考虑了编译期属性的实现,后来添加了运行时属性的实现。二者实现方案不同,前者使用数据,后者使用哈希表,主要是为了性能及动态之间的权衡。 使用托管属性的... 阅读全文
posted @ 2011-10-30 11:47 BloodyAngel 阅读(835) 评论(0) 推荐(1) 编辑
摘要:OEA 将会使用最新的扩展属性系统来编写实体类,而这些实体类需要绑定到WPF界面上。那么,扩展属性如何支持绑定呢?下面的图是分析在 WPF 中如何支持 DataTable 的动态列绑定。之后的 OEA 扩展属性系统中,会做出类似的设计,以支持绑定扩展属性。 图1 WPF 中 DataTable 支持绑定的核心类分析 图2 WPF 中为 DataTable 生成视图模型的流程图 阅读全文
posted @ 2011-10-30 11:28 BloodyAngel 阅读(705) 评论(0) 推荐(0) 编辑
摘要:【现象与案例】 八一七培训。 【感谢】 感谢老江如此辛苦地为大家培训,感谢所有辅导员,你们睡得比学员晚,起得比学员早,给学员带来这种有意义的培训。感谢洪星,大半夜不睡觉和我沟通,帮助我渡过思想上的难关。 【反思】 反思的东西实在太多了,真要挨个写下来的话,实在太花时间。所以挑重点的写写吧,我也简单,看的人也简单。 培训中,我学会了一些知... 阅读全文
posted @ 2011-09-13 20:56 BloodyAngel 阅读(380) 评论(0) 推荐(0) 编辑
摘要:上个月写了《框架模块设计经验总结》,这个月写了一些相关的流程的图,用于规范开发组的日常开发活动。时间比较晚,不过多解释,图也比较简单。 前两幅图是规范了在 OEA框架开发过程中,代码的管理流程: 第三张图主要规范了开发组内部如何进行框架的开发活动。 阅读全文
posted @ 2011-08-30 22:59 BloodyAngel 阅读(1770) 评论(1) 推荐(0) 编辑
摘要:本篇博客依然用于总结工作中遇到的较有用的设计模式。 入正题。 历史代码 我目前开发的系统中,要实现以模块的方式进行动态扩展。这些模块是以独立程序集的方式嵌入到系统中。原系统中,使用了一个简单的接口 IModule 来实现模块的初始化:public interface IModule{ void Initialize();}这样,在应用程序初始化时,会检测指定目录 Modules 下的所有程序集,并对其中所有实现 IModule 接口的类型进行初始化调用:public partial class App : Application{ protected override... 阅读全文
posted @ 2011-02-22 11:03 BloodyAngel 阅读(2836) 评论(11) 推荐(13) 编辑
摘要:之前写过几篇关于聚合对象SQL的文章,讲的是如果设计框架,使用一句SQL语句来加载整个聚合对象树中的所有数据。相关内容,参见:《性能优化总结(二):聚合SQL》、《性能优化总结(三):聚合SQL在GIX4中的应用》。由于没有使用其它的ORM框架,当时项目组决定做聚合SQL,主要是为了减少SQL查询的次数,来提升部分模块的性能。现在看来,当时虽然达到了这个目标,但是聚合SQL的API却不简单,使用极为不便。至今,项目组中的其它人也不会使用。所以,这次我们决定把聚合SQL的API使用再次进行封装,以达到使用起来更简便的效果。 本文中的内容与前面几篇的内容、与OEA框架中的内容相关性比较大,有兴趣的 阅读全文
posted @ 2011-01-07 16:48 BloodyAngel 阅读(1700) 评论(2) 推荐(2) 编辑
摘要:上篇文章《OEA中的AutoUI重构(2)- 评审会议前的总体设计》写了在“OEA框架”中进行AutoUI模块重构的设计方案。最近项目组已经召开了评审会议,并对该设计进行了审核、建议。本篇文章主要记录其中一些主要的改动。 设计改动 大家认为 AggregateBlocks 和 BlockDefinition 的设计过于复杂,不易于理解。考虑的东西太多,有过度设计之嫌,所以这一处的设计改为使用Composite模式来组合“UI块”: 另外,上次的设计中,有一个小错误:不应该把元模型的仓储 UIInfoRepository 放在单个的界面组成单元中,而是应该放在更上层的整个界面的元模型层。 相应 阅读全文
posted @ 2010-12-20 17:58 BloodyAngel 阅读(544) 评论(1) 推荐(2) 编辑
摘要:之前已经写了一篇关于其中Command模块的重构:《OEA中AutoUI重构(1) - Command自动生成》。Command自动生成的重构作为本次重构的一个“前锋战”,尝试用OO的方式把原来的过程式的界面自动生成流程进行优化,以支持更好的可扩展性。Command自动生成较为独立,所以就单独先进行了重构,目前重构已经完成,效果较好:和原有系统完成兼容,同时插入了更多必需的扩展点。 本次重构主要... 阅读全文
posted @ 2010-12-17 15:17 BloodyAngel 阅读(1445) 评论(1) 推荐(3) 编辑