在这部分,我将更为实际的展示从代码角度来看这一新的移动架构第一部分看起来会是个什么样子,如果您需要了解一些背景,请参阅本系列前面部分:
这个已经实现的架构被发布在CodePlex一个名字为Windows Mobile Architecture Blueprint的架构里,这意味着您可以访问完整的源代码并进行讨论,提出改进建议等等,当我带着你纵览整个架构时,我建议你身边放一份源代码以方便查看更详细的信息。
是时候看看我们如何在之前创建的Windows Mobile客户端项目中实现MVC模式了。正如这个系列的前面所接触到的,我们已经基于Alex的一个简洁明了的实现(参考part 1和part 2)构造了这部分的架构。
和Alex一样,我从核心的接口开始...
interface IView
{
void Show();
void Hide();
void Close();
string Text { get; set; }
}
interface IController
{
IView View { get; set; }
}
...然后主视图(窗体)的接口...
interface IMainView : IView
{
Category SelectedCategory { get; }
void SetCategories(Category[] categories);
void SetProducts(string products);
event EventHandler Done;
event EventHandler CategorySelected;
}
...这早已告诉我们这个主窗体能做什么。它允许我们设置一些类别(从SetCategories中去选择)而且它在一个类别被选中的时候会发出通知(CategorySelected)。它同样会通过一个公共的属性(SelectedCategory)而使得被选中的类别可用并且允许我们为这个类别(被选中的)设置产品。最后,它会通知什么时候用户处理完了(Done)。
这个主窗体控制器的实现看起来像这样...
class MainController : IController
{
private IMainView view;
private ServiceClient service;
public MainController(IMainView view)
{
View = view;
ServiceClient.EndpointAddress = new EndpointAddress("http://192.168.0.100:5610/Service.svc/basic");
service = new ServiceClient();
Category[] categories = service.GetCategories();
view.SetCategories(categories);
}
private void attachView(IMainView view)
{
this.view = view;
view.CategorySelected += new EventHandler(view_CategorySelected);
view.Done += new EventHandler(view_Done);
}
void view_CategorySelected(object sender, EventArgs e)
{
Category category = view.SelectedCategory;
string s = string.Empty;
foreach(Product product in category.Products)
s += product.ProductName + "\r\n";
view.SetProducts(s);
}
void view_Done(object sender, EventArgs e)
{
Application.Exit();
}
#region IController Members
public IView View
{
get { return view; }
set { attachView(value as IMainView); }
}
#endregion
}
..在创建时,这个控制器保存了它的视图,然后建立起事件处理器去捕获从视图来的事件。然后它产生第一个服务调用去获取类别清单发送给视图。当一个类别被选中的时候,一个字符串会被创建出来(我知道,在一个实际的解决方案里它应该是一个StringBuilder,但这个代码阅读起来很简单)并传递给视图。
主视图(窗体)的实现看起来像这样...
public partial class MainForm : Form, IMainView
{
public MainForm()
{
InitializeComponent();
}
public Category SelectedCategory
{
get { return categoryComboBox.SelectedItem as Category; }
}
public void SetCategories(Category[] categories)
{
foreach(Category category in categories)
categoryComboBox.Items.Add(category);
}
public void SetProducts(string products)
{
productsTextBox.Text = products;
}
public event EventHandler CategorySelected;
private void categoryComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
if(CategorySelected != null)
CategorySelected(this, null);
}
public event EventHandler Done;
private void doneMenuItem_Click(object sender, EventArgs e)
{
if(Done != null)
Done(this, null);
}
}
...这里我们可以看到类别被加载到一个组合框里,这被用来决定当前被选中的类别,而且当类别被选中时也会引发一个事件。产品字符串则被简单的放置到一个文本框里,一个菜单选项被用来提供用户退出。
为了管理(可以缓存)各种不同的控制器和视图,我们使用下面的单件类...
class ApplicationManager
{
public static readonly ApplicationManager Instance = new ApplicationManager();
private ApplicationManager() { }
private Dictionary<string, IController> controllersCache;
public MainForm GetMainForm()
{
if(!controllersCache.ContainsKey("Main"))
controllersCache.Add("Main", new MainController(new MainForm()));
return controllersCache["Main"].View as MainForm;
}
}
...而且这个应用程序将像这样开始...
[MTAThread]
static void Main()
{
Application.Run(ApplicationManager.Instance.GetMainForm());
}
分享到:
相关推荐
移动MAS机,全称为Mobile Application Server,是一种专为移动设备提供服务的应用服务器。它在企业移动信息化中扮演着重要角色,为企业提供了与移动设备进行数据交互、应用部署和管理的平台。MAS机主要关注于安全、...
Java 2 Micro Edition(J2ME)是一种轻量级的Java平台,主要用于移动设备、嵌入式系统和智能电器等。在2000年代初,J2ME是手机游戏开发的主要平台,尤其在非智能手机(如诺基亚的Symbian系统手机)上广泛应用。本篇...
9. **性能优化**:跨平台开发需要注意性能问题,包括内存管理、UI绘制效率、后台任务处理等。理解每个平台的性能瓶颈,并运用适当的优化技巧,是打造高效应用的关键。 10. **部署与发布**:完成开发后,需要将应用...
ASP.NET是微软公司推出的一种Web应用程序开发框架,它提供了丰富的功能和工具,便于开发者构建高效、可扩展的Web应用。在这个基于ASP.NET的旅游网站毕业设计中,我们将深入探讨如何利用C#编程语言和SQL Server 2005...
也有分析认为,谷歌并不想做一个简单的手机终端制造商或者软件平台开发商,而意在一统传统互联网和 移 动互联网。----------------------------------- Android 编程基础 4 Android Android Android Android 手机新...
在移动开发库中,Java是一种广泛使用的编程语言,因为Android原生支持Java。Java以其“一次编写,到处运行”的特性,使得开发者可以轻松地将应用部署到各种Android设备上。Android的Java开发主要使用Java SE的子集,...
此外,Xamarin还介绍了一种观察者模式,该模式能够从业务逻辑层中提取UI逻辑,使得业务层可以发布更新,而UI层则接收这些更新。 6. Xamarin库和第三方集成:Xamarin不仅提供了官方库,还支持第三方库的集成。例如...
Java作为一种跨平台、面向对象的编程语言,因其简单性、可移植性和强大的库支持,被广泛用于开发各种类型的游戏,包括移动设备上的游戏。J2ME(Java 2 Micro Edition)是Java平台的一个子集,专门针对嵌入式设备和...
标题中的“电信设备-一种基于GSM短信的无线监测装置”揭示了这个主题涉及的是一个利用GSM(Global System for Mobile Communications,全球移动通信系统)技术的无线监测系统,主要应用于电信行业。GSM是一种广泛...
1. IMS(IP多媒体子系统):IMS是一种基于IP网络的架构,旨在为移动和固定通信网络提供多媒体通信服务。它由3GPP(第三代合作伙伴计划)在2002年提出,旨在实现不同网络之间的互操作性和统一的服务提供平台。 2. IP...
参与开放手机联盟的这些厂商,都会基于 Android 平台来开发新的手机业务。 Android 基于 Linux 技术,由操作系统、中间件、用户界面和应用软件组成,允许开发人员自由获取、修改源代码,是一套具有开源性质的手机...
**3G**(第三代移动通信技术)是一种无线通信标准,为移动电话和数据终端提供高速无线互联网接入服务。3G技术显著提高了数据传输速率,使得视频通话、多媒体下载等高级功能成为可能。3G标准包括WCDMA、CDMA2000和TD-...
GSM(Global System for Mobile communications,全球移动通信系统)是一种广泛使用的蜂窝网络技术,其上行频段为**890MHz至915MHz**,用于移动终端向基站发送信号。 ### 4. GSM中的信道类型 在GSM系统中,信道...
**定义**:国际移动客户识别码(International Mobile Subscriber Identity,简称IMSI)是一种特定的识别码,用于在整个GSM移动通信网上正确识别客户。 **格式与结构**:IMSI号码由三部分组成: - MCC:Mobile ...
EVC(Embedded Visual C++)是微软为嵌入式系统开发设计的一款集成开发环境,它主要用于Windows CE和基于ARM架构的设备开发。本压缩包包含的资料主要关注于使用EVC进行GSM(Global System for Mobile Communications...
在移动设备领域,Pocket PC是一种基于Windows CE操作系统平台的个人数字助手(PDA),它提供了类似于桌面电脑的功能,包括电子邮件、日历、联系人管理、记事本等。本资料包"开发和部署 Pocket PC 安装程序.zip"专注...
这份"移动通讯词汇(中英).rar"压缩包文件包含了一个名为"移动通讯词汇(中英)new.doc"的文档,它提供了一种方便、快捷的方式来查找和学习移动通信领域的中英文对应词汇,有助于提升阅读理解能力,并消除语言障碍...
- **原生应用(Native app)**:指那些为特定平台开发的应用程序,例如iOS上的Swift或Objective-C编写的应用,Android上的Java或Kotlin编写的应用。 - **移动Web应用(Mobile Web app)**:这类应用通过浏览器运行...