领导力大挑战
在实施Scrum项目的过程中,Scrum Master的角色是相当关键的,因为他是团队的推动者。本文围绕什么是仆人式领导、仆人式领导的起源、如何将领导力传达给团队、Scrum Master作为仆人式领导者的角色展开叙述,同时重点阐述仆人式领导者应有的基本内外特征。
该内容已经被标记书签!
标记书签错误,请重试!

作者 王翔 发布于 2010年5月25日
虽然企业中多数项目往往通过自定制的界面和数据载体与后台系统交互,但在办公自动化、电子政务领域仍存在大量面向包括Word在内的电子文档操作。区别于Excel、Access和InfoPath等数据为中心的处理,Word更侧重于对于文章段落内容、格式的操作。
实践中,Office自动化开发中往往要面对下列挑战:
但同时我们也要看到Word自动化处理中的特点:
针对上述特点,为便于重复开发量、便于开发人员访问Word文档须进行局部架构设计。
但在此之前,为了简化Word编程,本框架针对Bookmark访问并操作Word,定义方法如下:
1、打开word文件,选择显示Bookmark

2、选择位置,然后插入Bookmark。对于需要操作的表格区域可以选择整个区域后插入Bookmark。

抽象角度看,Word自动化过程可归并为“读”、“处理”和“写”三个主要过程,其基本工作原理如下:

图:局部架构的工作原理
其中:
逻辑组件关系如下:

图:Word自动化处理主要组件
其中:
考虑不同项目对Word自动化处置的差异性,设计上将Adapter独立于应用之外,同时将每个Adapter需要执行的操作尽量固定,这样对于常规操作只需调用标准Reader和Writer即可。
(注:此外,考虑到自动化处理中文档内容的差异性,根据项目实践为提高数据的扩展性,一般推荐采用XML形式的数据文件。)
设计上,我们先抽象文档操作对象Adapter的行为接口,定义所需的数据与文档合并(Merge)操作:


图:适配器逻辑结构
其中:
IDocumentAdapter定义基本的行为,其内容甚至可以在没有Reader和Writer的环境下完成合并工作,所有行为可以由用户程序独立定义;IGenericDocumentAdapter<TData, TString>则提供基本的操作行为,其中通过泛型参数定义Reader反馈的数据类型以及它对应的字符串类型;DocumentAdapterBase作为实际Adapter的抽象类型,不仅提供对应配置节的内容,同时进一步补充Reader所提取实体内容的泛型参数。这样,通过对Adapter的三层封装,下游程序开发人员可以根据自动化情形的复杂程度选择适合的扩展基础。进一步,我们对Reader和Writer进行扩展,提供标准情景下标准数据类型的读写操作。


图:Reader部分的逻辑结构
其中:


图:Writer部分的逻辑结构
对于Writer部分:
在完成了外部调用关系的设计后,我们需要完成Word自动化的核心部分——通过Office Primary Interop Assembly(Office PIA)访问Word的基本操作。

图:项目中引用Office的PIA库
实际使用中,Word对象模型如下:

图:Word Object Model(摘自MSDN Microsoft Visual Studio Tools for the Microsoft Office system (version 3.0) 部分)
其中,Application代表一个WinWord.exe进程,对其打开关闭代价较大,频繁的打开、关闭势必会对后台文档自动化带来较大的运行负载,为此,需要集中控制。而每个Word文档可以通过Document获得引用,然后通过Bookmark检索到对应的区域(Range),进而通过Writer操作Range对象,填充、清除、修改该区域的内容。此外,考虑到类似电子表格的合并操作,往往外部数据记录数量超过Word模板(或文档)表格区域的大小,为此还需增加必要的Add Row方法、Add Column方法,本文示例为了简便,只设计了Add Row方法。
综上,Word自动化部分设计如下:

图:Word自动化部分设计
为了减少客户端程序的工作量,常见的操作参数保存在配置文件中,这样我们定义整个模型的自定义配置节如下:


图:配置对象
虽然直接调用Word PIA接口可以较快的完成一个具体Word自动化处理,但随着用户需求的变化,该类项目往往必须面临经常性的修改,为了尽量将修改控制在局部、提高下游开发人员的使用效率,一般可以通过对局部进行架构建模提升自动化框架的灵活性,而额外的工作量主要集中在抽象出Reader、Writer和根据文档操作目标定义相关的Adapter。
完成上述内容后,我们可以通过三个示例验证上述局部架构的适应性。



为了操作word中的表格,Reader往往可以从数据文件中提取一组多值实体。







点击下载示例代码。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家加入到InfoQ中文站用户讨论组中与我们的编辑和其他读者朋友交流。
在实施Scrum项目的过程中,Scrum Master的角色是相当关键的,因为他是团队的推动者。本文围绕什么是仆人式领导、仆人式领导的起源、如何将领导力传达给团队、Scrum Master作为仆人式领导者的角色展开叙述,同时重点阐述仆人式领导者应有的基本内外特征。
在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中对于锁的性能优化,以及锁的存储结构及升级过程。
本次分享将首先介绍现代富文本编辑器的组成和实现,然后结合UEditor的开发过程,与参会者分享UEditor在设计和实现的过程中,所涉及到的核心功能的细节实现。
本次演讲视频录制于百度技术沙龙。
我们所开发的应用程序大多都需要提供一个图形用户界面(GUI)。关于GUI应用的架构设计,已经有了Form & Control、MVC,、MVP、 Passive View等多种模式。模式可以帮助我们建立优雅的架构,但前提是弄清楚模式的应用场景。弄清楚GUI应用面临的设计上的问题,有助于我们正确的挑选设计方案。
MongoDB是一种非常易用的NoSQL方案,Brian C. Dilley在这篇文章里介绍了MongoDB的优劣势,并介绍了MJORM项目。MJORM用于MongoDB,是一个没有注解的Java ORM库。
随着网络基础设施的逐步成熟,从RPC进化到Web Service,并在业界开始普遍推行SOA,再到后来的RESTful平台以及云计算中的PaaS与SaaS概念的推广,分布式架构在企业应用中开始呈现出不同的风貌,然而殊途同归,这些分布式架构的目标仍然是希望回到建造巴别塔的时代,系统之间的交流不再为不同语言与平台的隔阂而产生障碍。
2 条回复
关注此讨论 回复