ya0911

花开花落也只是一瞬间的事情。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

.NET 路线图

C++/CLI 为你提供了极大的余地,可以选择如何访问由 CLR (以及由 WinFX )提供的功能。 如果你要编写一个新的应用程序,用 C++/CLI 编写以 CLR 为目标平台所具有的优点是不可抗拒的。 可以拥有可靠性,可以访问重要的托管 API ,从托管库中获得极高的开发人员生产率,而又无需放弃访问本机库或者任何 C++ 范型。 进行这种决策简直是再清楚不过了: 用 C++/CLI 为 Windows 编写一个托管应用程序。

那么现有的应用程序怎么办呢? 有些应用程序已经到了它们生存周期的末期: 你已经不想增加功能或者进行明显改动了。 用户不再指望它与其他应用程序集成。 像这样的应用程序无需转向 .NET 。 它们将在未来运行在 Microsoft Windows 代号 "Longhorn" 之上,因此可以不去管它们。

剩下的就是还没有到生存期末期的现有应用程序了。 你想维护和增强这些应用程序,可能还计划在增强中使用托管库。 或者你可能愿意以 CLR 为目标平台以减少大型分布式应用程序部署时的麻烦。 基本上,有三种选择: 重写,集成或者迁移。

重写是风险最大的一种方式。 必须完整地阅读代码,找出 .NET 世界中有等效物的库和构造。 例如,原来可能使用 MFC 构建 Windows 应用程序的用户界面: 而今天 .NET 中的等效物是 Microsoft Windows 窗体,在 "Longhorn" 时代是 Avalon 。 可以使用 ADO 或者 MFC 数据访问类处理数据: 而 .NET 的等效物是 Microsoft ADO.NET ,使用 DataSet 或者 DataReader 类。 寻找这些库和构造的工作量是非常大的。 然后还要重新编写应用程序的大部分,在此过程中还可能引入错误,所以还必须进行全面测试。 这都需要时间和成本,但是当工作全部完成,你将拥有一个现代的应用程序,全部用 C++/CLI 编写,尽可能使用托管库。

如果当前代码基础比较老,而且已经更新多次,或者你的开发团队并不能很好地理解,但是它又必须以某种方式改进或者更新,那么重新编写可能是最适合你的方式。 如果必须创建可以验证的程序集以用于部分信任情况,可能也需要采取一些重新编写的方式。 虽然对于大多数开发人员来说这一方式是第一计划,但是实际上它应该是最后的选择。 如果现在你的代码很简洁,文档齐全,性能很好,应该尽可能拒绝进行重新编写。

集成方式是将所有 .NET 库(基类库, WinFX, Indigo, Avalon, 等等)都视为要使用的新库。 现有的代码基础保持不变,用使用这些新库的新模块扩展它。 可以将应用程序的主干代码重新编译为 MSIL ,直接调用运行库中的新库,并使用 C++ Interop 访问老库。 或者,可以将主干代码保留为本机(非托管)代码,使用 COM 可调用包装来包装托管类型,将它们公开给旧代码。 进行一些性能测试有助于进行决策。 可以根据选择用 /clr 编译部分代码基础。

迁移方式处于上面两个极端之间。 在你的应用程序已经分成多个组件或者层时最适合。 (巨大的单块应用程序是非常难于维护的,因此无论如何都应该将应用程序组件化,但是这种重构也是一种形式的重新编写,会带来风险。) 然后可以将每个组件用公开托管类型的 C++/CLI 代码包装起来。 新的主干应用程序可以使用这些托管类型,新的托管类型也可以与 .NET 库交互。 随着时间推移,在包装中的本机“核心”可以重新编写为完全的托管代码,只使用托管库,如果有重要的性能原因或者代码安全原因需要如此的话。

posted on 2005-06-02 15:34  ya0911  阅读(374)  评论(0编辑  收藏  举报