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

2009年3月10日

摘要: 在这个系列里我们将着重研究著名的“抢滩登陆战2D”游戏在Silverlight 2.0中的实现方式。众所周知,Adobe的Flash一直以来是制作基于Internet小游戏的理想平台,而随着Microsoft发布Silverlight 2.0正式版,我们广大的.NET爱好者也可以在自己的平台上开发Internet游戏了。 阅读全文

posted @ 2009-03-10 19:08 洪博士™ 阅读(857) 评论(1) 推荐(0)

2008年10月9日

摘要: 在一个智能客户端应用程序中,你需要按程序的要求根据条件执行代码,并且此条件可以在运行时改变;判断条件的逻辑与要运行的动作逻辑是相互独立的,在条件被解析为“是”的情况下动作才被执行;你可以在运行时增加、替换或移除执行条件,也可以替换动作逻辑;最后你还希望在一些条件下可以执行全部动作,而另一些条件只能应用到特定的动作上。 一个例子就是在当前用户是某个特定的角色的时候,应用程序会在一个Workspace(工作区)中显示一个View(视图),其中动作就是显示View的代码,而条件就是判断当前用户的角色是否为指定角色的代码,条件的逻辑不与动作的逻辑相关,更改条件的代码不会对动作的逻辑产生副作用。 阅读全文

posted @ 2008-10-09 21:52 洪博士™ 阅读(253) 评论(0) 推荐(0)

2008年10月7日

摘要: 一般来说,一个应用程序包含多个WorkItem(工作项)和服务,一个WorkItem仅可以包含同一服务的一个实例,同一服务的多个实例被放置在多个WorkItem中。你想使用多个WorkItem中的多个服务实例,同时也可以优先使用某一个WorkItem下的服务实例,每一个WorkItem都可以从WorkItem层次结构的当前位置获取正确的服务实例。 阅读全文

posted @ 2008-10-07 16:49 洪博士™ 阅读(602) 评论(0) 推荐(0)

2008年10月6日

摘要: 你想访问一个WorkItem(工作项)中的组件,但是这个WorkItem不在根结点的WorkItem下,它存在于WorkItem层次结构的其他位置,同时这个结构可能位于其他模块中。 例如:银行客户端参考项目中的基本帐户模块通常包含存款单业务组件,这些组件的实例是特定于某个客户而言的,例如银行职员进行存款单业务的时候使用一个View(视图)来显示当前客户的信息,由于这个职员可以同时为多个客户提供服务,基本帐户模块必须对于每一个客户创建不同的组件实例。 阅读全文

posted @ 2008-10-06 21:24 洪博士™ 阅读(252) 评论(0) 推荐(0)

摘要: 你有一个大型的智能客户端应用程序,这个程序有许多不同团队开发的不同模块组成。一些模块需要依赖另外一些模块,例如:帐户模块需要基础模块中的日志服务,如果要访问这个日志服务,帐户模块必须先引用基础模块的程序集,每当基础模块的代码发生更改,帐户模块也必须重新编译。 阅读全文

posted @ 2008-10-06 14:38 洪博士™ 阅读(223) 评论(0) 推荐(0)

摘要: 智能客户端应用程序可以支持许多后台服务,你想让不同的团队单独地开发并支持每一个服务,另外,你不想让开发人员在程序可以运行的情况下,通过修改现有代码来包含新的后台服务。 阅读全文

posted @ 2008-10-06 10:02 洪博士™ 阅读(362) 评论(0) 推荐(0)

2007年9月24日

摘要: 问题 一个智能客户端应用程序经常在后台线程中执行一些操作,而且有时在同一线程中还执行一些 UI (用户界面) 的操作。比如当一个操作结束,应用程序必须更新 UI。然而,Windows 应用程序仅能够在 UI 线程更新界面控件的状态,因此,应用程序必须将控制权交还到 UI 线程手中。 解决方案 在 View (视图) 类中创建一个私有方法来更新 UI;定义一个与这个私有方法格式相同的委托;创建一个公共方法,这个方法通过 Presenter 调用 View 更新 UI。在这个公共方法中,当必要时需要编写代码将控制权交还到 UI 线程。你可以使用 View 的 InvokeRequired 属性来决定你是否必须将控制权交还到 UI 线程,如果 InvokeRequired 属性为 True,使用 BeginInvoke (也可以使用 Invoke) 通过委托来呼叫那个私有方法。 阅读全文

posted @ 2007-09-24 15:32 洪博士™ 阅读(158) 评论(0) 推荐(0)

摘要: 问题 通常一个客户端应用程序会包含许多不同类型的视图,这些视图从的各种部件或模块显示数据。例如,一个应用程序会并列显示客户列表与选中客户的详细信息。 解决方案 创建一个 Workspace (工作区) 层次结构,这个结构讲客户端界面分割成多个嵌套的矩形区域,见图示一。在这个基于 Composite UI Application Block 的架构设计中,Workspace 是一个能够显示多个 View (视图) 的区域。 阅读全文

posted @ 2007-09-24 13:42 洪博士™ 阅读(516) 评论(1) 推荐(0)

2007年9月21日

摘要: 问题 在多个视图的用户界面中,你可能经常会更新一个视图作为另一个视图用户动作响应的结果。例如,一个视图显示数据列表,另外一个视图显示记录的详细信息,当在数据列表中选中一条记录(在一个视图中的动作),另外一个详细信息视图就会显示这条记录(触发第二个视图的动作)。 解决方案 这个方案将两个 View (视图)相关的两个 Presenter (展示器)通过事件进行交互。图示一显示了这个方案的逻辑视图。在这个图示中,View A 检测到用户点击了一条记录,View B (它可以存在于另外的 Module (模块)或 WorkItem (工作项)中)须响应这个用户事件。要完成这个任务,以下步骤将被执行: 阅读全文

posted @ 2007-09-21 18:21 洪博士™ 阅读(839) 评论(1) 推荐(0)

摘要: 问题 不是所有的应用程序组件需要相同的可见性与生命周期,一个智能客户端应用程序管理着许多不同的组件的实例,比如 Services (服务), Event Topics (事件主题),Commands (命令),Work Spaces (工作区),还有 UI Extension Elements (界面扩展元素),这些实例联系紧密,它们一起被创建,也一起被销毁。这些关联的组件实例能够互相访问,但是它们不能访问不被关联的组件。 解决方案 将相互关联的组件放入容器并形成一个层次结构,这个容器是一个能够封装并跟踪多个组件的特殊对象,在这里,“封装”这个术语指的是逻辑上的包含。 阅读全文

posted @ 2007-09-21 12:08 洪博士™ 阅读(566) 评论(1) 推荐(0)

2007年9月20日

摘要: 问题 一个智能客户端应用程序中的窗体经常包含各种控件,处理用户事件,包含逻辑来改变控件以响应这些事件。在窗体类中编写这些代码,将使整个类趋于复杂,同时难以测试。此外,在窗体间互相共享和调用具有相同行为的代码也变得非常困难。 解决方案 将显示和事件控制行为进行职责分离,将他们放入不同的类中。一个叫做 View (视图) 的类管理窗体上的控件,它将事件传递给一个叫 Presenter (展示器) 的类,Presenter包含事件响应的逻辑,然后处理 View 的状态。这个 Presenter 类通过 Model (模型) 来决定如何响应事件(应用程序的状态经常由 Business Entity (业务实体) 展现)。 这个方案可以将职责分离,并允许你在不通过界面的方式下进行测试。 阅读全文

posted @ 2007-09-20 20:37 洪博士™ 阅读(1733) 评论(3) 推荐(0)