一种新的基于Windows Mobile平台的移动开发N层架构(第六部分)

一种新的移动N层体系结构( 6 )

在这部分,我将更为实际的展示从代码角度来看这一新的移动架构第一部分看起来会是个什么样子,如果您需要了解一些背景,请参阅本系列前面部分:

这个已经实现的架构被发布在CodePlex一个名字为Windows Mobile Architecture Blueprint的架构里,这意味着您可以访问完整的源代码并进行讨论,提出改进建议等等,当我带着你纵览整个架构时,我建议你身边放一份源代码以方便查看更详细的信息。

nwdatacontext好吧,让我们自下而上开始建立这个体系结构。为简单起见(记住KISS原则),我从一个承载业务域的普通类库Blueprint.Domain开始。我的第一个域将涵盖经典Northwind数据库的一小部分。我先创建一个叫做Northwind的LINQ2SQL 数据上下文,然后把两个Northwind表拖进去(如果你像我一样,并没有安装Northwind数据库,您可以从这里得到http://msdn.microsoft.com/en-us/library/ms165732.aspx),正如你右边所看到的(注意我已从类别中删除了图片域,以节省带宽)。

 

当这个做到以后,一个简单方便的技巧就是在数据上下文的设计图中选择属性并设置序列化模式为单向。通过完成这个简单的任务,这个数据上下文生成的代码将包含必要的修饰(属性),使数据上下文可以通过WCF发布。如果我们看一下生成代码的简略版(在Northwind.designer.cs里)...

public partial class NorthwindDataContext : System.Data.Linq. DataContext
{
    [ DataContract ()]
    public partial class Category
    {
        [ DataMember (Order=1)]
       
public int CategoryID
        {

...你会看到,每个类(实体)有一个DataContract属性,每个字段(属性)有一个DataMember属性。这些属性在通讯的时候将被WCF使用。

 

在上面的代码中,也请注意,生成的数据上下文类(NorthwindDataContext)被声明为“partial”,这完全符合我们把业务逻辑实现在一个并行类里的意图。通过建立这样一个类(Northwind.cs),以及放置一些简单的代码像这样...

public partial class NorthwindDataContext
{
   
public Category [] GetCategories()
    {
        return Categories.ToArray();
    }
}

...我们已于首个业务域里实现了第一个(尽管稀少)服务,功能是返回所有类别列表。请注意在幕后,LINQ发挥了作用,为了展示一个更明显的例子,我们可以改为这样做...

 

var q = from c in Categories select c;
return q.ToArray();

...这将创造和上面的代码相同的结果。有一个事实早就值得一提,就是即使类别实体拥有和那个类别中所有产品的关系,这些子实体并不会默认加载。这是一件好事,因为你可能不希望加载所有产品的所有类别,但当你想加载相关实体的时候,你也可以做得到:通过一个显式的调用...

 

var q = from c in Categories select c;
Category [] categories = q.ToArray();
categories[0].Products.Load();

...加载所有产品的第一类。还有其他一些选项用于控制如何加载相关实体,但它已经超出了这个博客帖子的讨论范围。在后续的帖子中,我将覆盖更多Windows Mobile Architecture Blueprint的实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值