每周源代码23 – 大型解决方案版

[原文发表地址]  The Weekly Source Code 23 - Big Solution Edition

[原文发表时间] 2008-4-10 6:50 AM

这周我的源代码读起来时毫无节奏和理由可言,但大部分代码量确实很大。所以这就是大型解决方案版本。我的新任务是来探索:如何通过读源代码来成为一个好的开发人员

亲爱的读者,我现在向你们展示"每周源代码"一系列帖子中的第23个。

BigPicture

开发人员已经把Mix上Deep Zoom Hard Rock网站的Vertigo软件发布到了CodePlex上, 他们把在项目中对鼠标轮的支持称之为BigPicture。最初看到时,我对其嗤之以鼻,但后来在阅读的过程中才意识到,开发者们(也包括我自己)除了迫不及待地添加一些鼠标滚轮支持到DeepZoom Helloworld 例子之外,还有其他的许多巧妙的东西。

首先,他们想出了在 Silverlight 2.0 beta 1的 DeepZoom上禁用初始的“无处缩放”动画的方法。他们首先将 UseSprings关闭,然后再第一个动作完成后再打开。

    1: ///
    2: /// Handles the "MotionFinished" event fired by the MultiScaleImage, but only re-enables the "UseSprings"
    3: /// property after the first motion completes (a little trick to properly bypass the initial "zoom in
    4: /// from nowhere" animation when first loading)
    5: ///
    6: /// The MultiScaleImage instance.
    7: /// Unused RoutedEvent arguments.
    8: void image_InitialMotionFinished(object sender, RoutedEventArgs e)
    9: {
   10:    if (!isInitialMotionFinished)
   11:   {
   12:      isInitialMotionFinished = true;
   13:         image.UseSprings = true;
   14:    }
   15: } 

事实上,这确实很简单、显而易见。但我还是没弄明白。他们在开发VS产品中还使用 App.Current.Host.Source 来处理这类Uri的问题。

    1: Uri collectionUri;
    2: if (Uri.TryCreate(App.Current.Host.Source, "/Collection/items.bin", out collectionUri))
    3:     image.Source = collectionUri
他们还创建了一个很棒的MultiScaleImageWrapper类将所有的平移和缩放行为封装到一个类中。

DevServer

刚开始看到这个项目时,我不确定该怎么做。但看到项目说明时,我的眼睛顿时一亮:

    NetFXHarmonics DevServer是一个建立在 WPF和WCF技术的web服务器托管环境。它允许多个Cassini-like实例的web服务器并行运行。 DevServer也包括监视请求和响应、请求过滤、自动 ViewState、 ControlState解析、提高视觉效果的HTTP状态代码、只限本地访问以及远程访问的IP绑定模式、易于使用的XML配置文件等等诸多跟踪功能。

除了在上一个公司创建的WCF应用程序外,

我并没看到太多WCF的东西。 DevServer是一个有趣而完整的Cassini-likeweb服务器。他之所以编写这个的原因是他想更便捷地调试多个WCF服务和 ASP.NET网站的协同工作。与其使用客户端或嗅探工具,为什么不使用该服务器呢?

整体阅读下来,感觉该代码非常有趣。也包含了众多小而实用的方法。他对数据进行解析,解码,显示ViewState,显示标题,格式和原始内容,等等。

image_2

 

David Betz是个编写了大量代码的程序员。他在返回社区之后在 CodePlex上发表了一大批项目。其中,一个特别有趣的项目是Minima .NET 3.5 Blog Engine,他将该引擎当作培训工具使用。当然,你可以在他的博客中找到它。你可以花时间到该网站上看看,有很多值得学习的东西

LINQ有点复杂,对于查询的视觉化和编写是有一定难度的。来自微软法国的Mitsu先生和他的两个法国学生Simon FerquelJohanna Piou一起为LINQ编写了一个可视化查询生成器,我们可以把它作为Visual Studio的插件使用。

该插件使用WPF,有一系列很炫的动画以及一个全新的UI设计。您可以在类视图上拖动您的LINQ 到 SQL类,使用动态生成的列表框和创新的树视图(我以前没听过)来直观地构建LINQ查询。

vlinq

这一切太美好了。代码是可用的,同时它可以提前测试代码的正确性。但读起来真的很有趣。我真的很喜欢开发人员们设计的解决方案结构。clip_image010

他们还大量使用了类图,大概因为他们还是学生,所以他们比较注重细节,所以,对于较难的部分,像查询格式,他们有一个相关的类图。我总是记不起VS2008的这个功能。

他们想出了一个有趣的VS集成项目,这可以帮助开发人员设计可视化设计器并把其作为插件植入到Visual Studio中. 另外这里还有一些有趣的WPF控件,如"MultiS和"TreeListView."

这是个艰巨的活儿,我要花很长时间来消化它。在某些方面它确实很出色,但在其他方面却显得极其复杂,可能有点夸张。幸运的是,你无需阅读代码,如果你愿意,可以通过安装他们的MSI来使用。