UML软件工程组织

提高你的开发效率
By Bill Wagner 选择自 发赛特技术网
Visual Studio .NET 2003增加了一些新工具和新功能,它们可以提高你的开发效率,使你可以更快地完成更多的任务。
By Bill Wagner
技术工具箱:VB.NET、C#、ASP.NET

Visual Studio .NET 2003并不像VS.NET的最初版本那样有很强的创新性(除非你用的是C++,稍后我会对此做更多的讲述),但其新的功能对提高开发效率却大有帮助。

VS.NET最初版本强调的是可以让你创建Web services和Internet应用程序;VS.NET 2003在扩展这些功能的同时,引进了移动性(见图1)。该版本最显著的特点是增加了适用于Pocket PC和其它与Windows CE相关的设备的.NET Compact Framework(CF)。VS.NET 2003还增加了ASP.NET移动控件包(即以前我们所说的Microsoft Mobile Internet Toolkit),它可以让我们为移动设备创建基于Web的应用程序。

VS.NET 2003在安全性和可用性方面也有很大的改进。例如,Microsoft改进了.NET Framework Class Library来支持Microsoft的可信赖计算计划(computing initiative)。所以来源不可靠的程序是不能访问部分.NET Framework的,而且如果程序是从Internet或类似不可靠的地方下载的,那么它们在访问机器资源时也会有权限限制。这些功能使你可以更容易地为任何设备创建更安全可靠的基于Internet的程序。


				图1.
图1. 强调开发效率
.NET的Web service体系——或者更明确地说,WSDL.exe——也有一个很小但很有用的改进:可以为一个Web service命名名字空间。这就意味着,你在机器上测试所用的所有服务器代理都可以有一个另外的名字,而不是“localhost”。在用于Oracle和ODBC的数据提供者方面,ADO.NET也有了改进。从VS.NET 2003工作区(workspace)的Server Explorer可以看到这些新的提供者。另一个好处是:该版本的VS.NET 2003明确说明并行部署是可行的,即,类库的1.0版本和1.1版本可以并存在同一台机器上,你甚至可以将1.0框架作为用VS.NET 2003构建的项目的目标框架。

本文从总体上讲述了Visual Studio .NET的新增功能,以及它的两个开发语言:C#和VB.NET。然而,任何.NET语言最显著的变化则是体现在C++中的,不管是其托管版本还是本地版本。一个最重要的变化是,C++现在更接近ANSI标准了。而且,托管C++与VS.NET IDE的整合更好了。除了用#import指示符外,你可以用Solution Explorer包含对项目的引用。托管C++开发人员不再需要手动地构建窗体了;窗体设计器被整合到了托管C++项目中,就同它整合到C#和VB.NET项目中一样。

其它的新功能提高了程序员的开发效率。IntelliSense有很大的改进:你可以自动地为接口和事件方法插入stubs,当你添加它们时,IntelliSense会建议对它们进行覆盖。在IDE中也有很多新的、很小的但却很好的功能,它们可以让你用更少的时间写更多、正确度更高的代码。在此,我就不详细讲述所有功能了,但我想,你一定会对这些新功能有很多感受的,就像我在过去几个月中试用Beta版所体验的那样。

移动性
Microsoft说过移动设备是未来的主流,这一断言从来没有动摇过。因此,VS.NET 2003提供了工具使我们可以更容易地在Pocket PC、智能设备以及其它Windows CE设备上构建应用程序。.NET Compact Framework包含.NET Framework的一个子集,以及特别针对Pocket PC设备的几个新的类。

特殊的CF类可以让我们创建在Pocket PC和类似Microsoft设备上运行的应用程序。这些类中最有用的类位于System.Data.SQLServerCE名字空间中。这些类可以让我们对SQL Server CE(SQL Server的Pocket PC版本)做各种操作。用过SQL Server的人对所有这些类都会很熟悉。其中最重要的一个新的类是SQLCeReplication类,它可以让你将移动数据库与企业数据库同步。其它CF特有的类可以让你与文本输入面板和Pocket PC设备附带的卡通讯。

Compact Framework在两方面对规则的.NET Framework做了调整。首先(最明显的),服务器组件(ASP.NET和相关的程序集)不是CF的一部分。第二,通过提供较少的可重载的.NET类成员函数,Microsoft减小了footprint。这些步骤是一个总体计划的一部分,目的是使我们可以尽可能多地保留其功能,同时在目标设备上创建最小的footprint。

CF的最大的好处是,它可以让你通过最少的工作将用户移到一个全新的平台,同时保留大量的企业商业逻辑。注意,这并不是说,你可以通过简单地运用CF就将应用程序重定向到Pocket PC上了。你需要重新设计用户界面,从而解决屏幕更小、没有键盘和其它限制性问题。但比较好的一点是,运用.NET Framework,大量的商业逻辑可以很容易地移植到Pocket PC上。这对日常编程工作没有很大的直接影响,毫无疑问,企业希望增强这种移植能力。

如果你想让新的、丰富的应用程序在目的Pocket PC或Windows CE设备上运行,Compact Framework会很适合。但有时候,你可能更喜欢在这些设备(或不支持Windows的设备)上运行小的基于Web的应用程序,如一个Palm设备或可以上网的移动电话。在这种情况下,你可以利用ASP.NET移动控件。移动控件,同相应的ASP.NET控件一样,它们根据浏览器和目的移动设备的不同会有不同的呈现方式。大量的移动控件可以为移动Web应用程序提供类似的ASP.NET功能,包括文本框、日历、列表、移动表单(mobile form)、标签和图像。VS.NET也包含另外一些控件,它们没有相对应的ASP.NET控件。例如,PhoneCall控件,它可以让你显示并呼叫基于Web的手机用户的电话号码。

从你开始使用新的VS.NET 2003起,ASP.NET移动控件(同.NET CF一样)就不会影响你的日常生活。随着时间的推移,这些控件可以让你毫不费力地将它们用于针对移动设备的应用程序中。

创建更安全的应用程序
并不是每个人马上就需要或可以利用移动功能,但安全性功能的改进则会影响到每个人。VS.NET下的.NET 1.1 Framework提供了更好的安全性和更好的方法使我们可以写更安全的应用程序。一个主要的变化是,不完全可靠的应用程序是不能访问部分.NET Framework或其它共享的程序集的。例如,从Intranet或Internet下载的任何程序集比从本地机器直接下载的代码的权限都要低。这就意味着,.NET应用程序会更安全,即使从远程站点下载它们。比如说,不完全可靠的程序集就不能访问System.IO名字空间中的任何类。这一点会很好,因为你从远程地方执行的程序集就不能访问你的机器上的文件。注意,这些变化就意味着,作为一个开发人员,你有另外的责任,如需要紧记如何部署程序集、如何处理可能出现的安全性被破坏的问题。

VS.NET 2003还可以使我们在开发用机上以非管理员的身份更容易地开发和调试.NET应用程序。确信当运行应用程序的用户不是管理员时,你的应用程序可以正常运行是很重要的。要实现这一点的最好的方法就是以非管理员的身份进行开发。这也同样适用于开发传统的台式应用程序和ASP.NET应用程序。最初的VS.NET使这种方式的开发很难实现;目前,只有当你需要创建本地COM对象时,还存在这样的问题。构建并运行一个COM对象需要你注册它,而注册COM对象仍需要管理员权限。这就是说,你需要修改程序设置,以管理员身份运行程序。不管怎样,对开发人员来说,VS.NET 2003都有了很大的改进,因为在创建除COM对象之外的任何对象时,你都不再需要以管理员身份登录了。用户并不是以有限权限运行应用程序的第一个人了。

移动性和安全性是新版VS.NET的重点,不过Microsoft对.NET Framework的其它方面也做了改进。1.1版本包含了Oracle和ODBC的数据提供者,以及一个FolderBrowser对话框。你不再需要用Platfrom Invoke来得到Win32 API,然后选择或创建一个文件夹了。该组件的用法类似于OpenFileDialog。

 

				图2.
图2. 绘制非矩形窗口
另一个改进是,.NET 1.1 Framework可以让我们创建非矩形的窗体。过去要实现这一点是很难的,大多数开发人员都避免实现该功能,即便该功能对一个特定UI很有必要时也是如此。现在,你可以创建一个图像,它可以定义你需要的窗体的形状和背景,然后设置正确的属性(见图2)。

将1.0版本作为目的框架
在发布VS.NET 1.0时,Microsoft宣称DLL Hell将不再出现,它将开创一个新纪元:各种版本的应用程序,甚至是VS.NET版本的应用程序都可以并存。VS.NET 2003支持该想法。几个月来,我在同一台机器上运行了VS.NET 2003 beta版和最初版本的VS.NET。每个版本用的是它自己的框架。

这一点非常棒,但仍会有一些版本问题。例如,假设你的用户没有很快地升级框架来匹配需求。只要你避免在框架中运用1.1版本的任何新功能,你就可以针对1.0框架来构建你的程序集。VS.NET可以让你在创建应用程序时,针对Framework 1.1、Framework 1.0或两者兼顾。注意,这些设置不会改变程序的可执行性,而是会改变你的应用程序的配置文件。配置文件指定了要加载的每个.NET Framework程序集的版本。

遗憾的是,如果你创建的应用程序同时兼顾了Framework 1.0和Framework 1.1版本,那么你就需要做更多的测试。如果应用程序两者兼顾,那么在设计时,VS.NET用Framework 1.1构建应用程序。在运行时,如果VS.NET用Framework 1.0配置应用程序,就会出错。如果应用程序在Framework 1.0上运行时运用了1.1的功能,那么就会出现一个运行错误。几个月来,我一直运用该功能创建目的框架为Framework 1.0的应用程序。的确很有用,只要你确保程序只用Framework 1.0。测试应该会发现任何问题,但在发布任何软件前,你应该在只安装了Framework 1.0的机器上运行全套的测试套件。

VS.NET 2003延续了Microsoft对推动企业开发所做的努力。它的一个副作用就是程序变得越来越大了。例如,我有一个解决方案,它包含了40多个不同的项目。在处理这种类型的解决方案时,最初版本的VS.NET有时侯会有问题。VS.NET 2003解决了该问题,现在,当你处理一个特定的解决方案时,可以更容易在项目之间进行切换。VS.NET 2003也可以记录你现在正编辑的是哪个项目。这就意味着,运用当前项目的任何命令(如Find in Files)都只对当前项目起作用。如果你想自己设置当前项目,可以关闭该功能。只需要导航到Tools|Options,然后在Envrironment | Projects and Solutions中清除“Track Active Items in Solution Explorer”项就可以了。

另外一个很酷的功能是引用Web命名。假设你在开发机器上构建了一个Web service和一个Web service客户端,目的是可以在其它地方部署该Web service。最初的VS.NET版本会为这些Web services创建一个名为“localhost”的名字空间。VS.NET 2003可以让你给这个Web service引用一个更有意义的名字。

的确,移动性、安全性以及对框架的其它改进都很好。但我最喜欢的新功能是接口的代码生成功能。在你使用C#或VB.NET时,如果声明了对某个函数的支持,IDE就会为它添加stubs。在C#中,你需要按Tab键。然后VS.NET会添加stubs并将它们放在一个区域中。在VB.NET中,当你编写了Implements语句后按Enter时,VS.NET 2003就添加了方法。当你在编写大的接口或来源于其它接口的接口时,跟踪遗漏了哪些函数或输错了哪些函数时,该功能就可以节省许多编译周期。

当然,最终的问题是:你需要VS.NET 2003吗?该版本不像最初版本那样很具创新性,但VS.NET 2003中引进的许多功能可以让你节省很多时间和精力,可以让你将更多的精力集中在你想创建的解决方案上,而不是你用来创建该解决方案的代码和环境上。例如,与事件处理程序结合在一起的接口自动生成代码功能和C#中的覆盖功能每天就可以节省我几个小时的代码输入时间。另外,增强的安全性能对客户来说也是个很好的功能,如今,没有人愿意带来任何病毒危险。即使你不会立即运用移动性功能,但在不久的将来你一定会需要该功能的。

关于作者:

Bill Wagner是SRT Solutions的Windows技术专家。他是Visual Studio Magazine的撰稿编辑,也是The C# Core Language Little Black Book一书的作者,这是一本C#开发人员的高级参考书。在16年的软件开发实践中,Bill在许多项目中都是重要的开发人员。他曾为工程和商务应用程序、桌面和Web环境开发过软件。他在2D和3D图象和多媒体软件方面也很有经验,包括为The Lion King Animated Storybook开发的视频回放引擎。他的联系方式是wwagner@SRTSolutions.com。
 

版权所有:UML软件工程组织