领导力大挑战
在实施Scrum项目的过程中,Scrum Master的角色是相当关键的,因为他是团队的推动者。本文围绕什么是仆人式领导、仆人式领导的起源、如何将领导力传达给团队、Scrum Master作为仆人式领导者的角色展开叙述,同时重点阐述仆人式领导者应有的基本内外特征。
该内容已经被标记书签!
标记书签错误,请重试!
作者 Jonathan Allen 译者 侯伯薇 发布于 2011年11月5日
之前我们报道了Roslyn编译器和工作空间API(Workspace API)。现在让我们来看下Roslyn的服务API,以及我们能够如何使用它来扩展Visual Studio。我们在本文中要查看的扩展包括代码问题报告、快速修正、代码重构、自动完成提供程序以及大纲视图。
和所有最新的Visual Studio扩展一样,服务API(Service API)也是使用MEF注册的。这意味着开发者只需要实现特定的接口,并包含相符的MEF样式的属性就可以,与之前版本的Visual Studio相比,这项改变受到了大家的欢迎,之前我们需要使用代码签名以及COM注册才可以。
代码问题报告
代码问题报告(Code Issue)扩展让开发者可以编写自己的编译器警告和错误。在CTP版本中包含的实例为我们展示了,如何在语法树中出现字母“a”的地方显示警告。正如你在下面的图中所看到的,它很好地整合到Visual Studio的总体工作流程之中。


ICodeIssueProvider接口非常简单,它只包含了GetIssues方法的三种重载。每种重载方法都会接受IDocument参数,其中包含了所有与正在处理的文件相关的信息,包括原始文本、语法树、语义模型以及指向所包含项目的反向引用。其中还包含了一个取消令牌(cancellation token),以防备IDE需要取消分析操作,原因可能是因为用户对某个文件进行了编辑。
三种重载方法还会接受三种语法类型中的一种: 节点(node)、令牌(token)或者琐碎内容(trivia)。大多数分析工作都是在节点级别上完成的。琐碎内容代表的是编译器不需要的信息,像空格、注释以及缺少上下文的令牌。另一方面,节点表示的内容很广泛,从最顶级的命名空间声明,一直到最小的表达式都可以表示。
当检测到错误的时候,它就会以CodeIssue列表的形式返回给IDE。CodeIssue中会包含严重等级(信息、警告还是错误)、表示错误发生位置的Span对象以及对错误的描述。
快速修正
代码问题报告中可能还包含一个或多个ICodeAction对象。这些对象让开发者可以提供自动修正的选择,就像下图所显示的这样。

创建ICodeAction并与ICodeActionEdit匹配要比创建代码问题报告困难得多。我们需要学习如何编辑语法树,并通过IWorkstation接口来发布所做的变更。Roslyn站点上提供了编写快速修正的简单教程。
代码重构
对代码重构的支持看起来和修正代码问题的“快速修正”功能很类似,但是它应用于文本级别。使用ICodeRefactoringProvider的时候要提供一个文档和TextSpan对象,并且要返回CodeRefactoring对象。这个对象只是包含了ICodeAction对象的集合,就像上面所讨论的CodeIssue对象一样。
为代码重构所提供的项目模板中并没有包含可用的演示程序,但是在此我们可以使用快速修正教程中所展示的相同技术。
自动完成提供程序
ICompletionProvider接口中仅有一个叫做GetItems的方法。它会接受一个IDocument类型的参数和一个整型的position参数。并返回CompletionItem的列表。每个CompletionItem都需要提供要显示的文本。开发者可能还会在其中包含图标、描述和(或)要插入的替换文本。(对于insertionText,如何不提供的话,默认就是要显示的文本。)
尽管它不像其它提供程序那样有用,但是我们还是可以做一些有趣的操作,像构建对于一般的代码片段结构过于复杂的模板等。
大纲视图
最后一个项目模板是语法大纲视图(Syntax Outliner),这是通过ISyntaxOutliner接口暴露出来的。我们可以使用它在文本编辑器中创建可折叠的大纲视图,就像我们可以折叠区域、类和方法一样。接口会接受一个语法节点(Syntax node)作为参数,并要返回一个OutliningSpan对象列表,其中每个对象都拥有所要包含的TextSpan、HintSpan(用于鼠标悬停时显示文本)、标题文本以及自动折叠的选项。
查看英文原文:Building Visual Studio Extensions with Roslyn译者 侯伯薇 是InfoQ中文站架构社区编辑,有多年对日和国内项目开发经验,目前关注企业中技术与实际业务之间的融合和协作。
在实施Scrum项目的过程中,Scrum Master的角色是相当关键的,因为他是团队的推动者。本文围绕什么是仆人式领导、仆人式领导的起源、如何将领导力传达给团队、Scrum Master作为仆人式领导者的角色展开叙述,同时重点阐述仆人式领导者应有的基本内外特征。
论道WP第三篇专栏,以应用程序栏的使用为中心,包括了软键盘带来的问题、应用程序栏介绍、如何绑定应用程序栏的属性等几个方面的具体话题,为开发者顺利使用应用程序栏开发提供了具体指导。
在多线程并发编程中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概念的推广,分布式架构在企业应用中开始呈现出不同的风貌,然而殊途同归,这些分布式架构的目标仍然是希望回到建造巴别塔的时代,系统之间的交流不再为不同语言与平台的隔阂而产生障碍。
没有回复
关注此讨论 回复