- 浏览: 475580 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1028)
- [发布至博客园首页] (826)
- [随笔分类]个人生活随笔 (14)
- [网站分类]首页候选区 (26)
- [网站分类]SharePoint (15)
- [网站分类]其他技术区 (6)
- [随笔分类]批处理技巧 (6)
- [随笔分类].net 2.0 (3)
- [随笔分类]SharePoint2007(MOSS2007) (0)
- [网站分类].NET新手区 (6)
- [网站分类]ASP.NET (6)
- [网站分类]架构设计 (18)
- [网站分类]程序人生 (2)
- [网站分类]SQL Server (2)
- WCF (3)
- 编程技巧 (2)
- 模式架构 (2)
- 分析设计 (4)
- 生活随笔 (0)
- 软件工程 (1)
- Android实例 (2)
最新评论
-
zilong0536:
楼主您好:
请问发表博文支持图片的功能怎么实现啊,一直没有思路 ...
新浪微博开放平台开发-android客户端(3) -
nicegege:
小弟 学习了
帮助中国移动设计10086的排队小模块 -
zl7824516:
用什么技术没说啊
通告(公告),消息(站内短信),提醒的设计:通告 -
virusswb:
源码下载: SinaWeibo2 源码下载之后,将后缀改为ra ...
新浪微博开放平台开发-android客户端(3) -
Jimmyxu0311:
找不到源码下载
新浪微博开放平台开发-android客户端(3)
silverlight+wcf:relation entity VS. relation entity's code
- 博客分类:
- [发布至博客园首页]
本文主要探讨一下,在使用silverlight+wcf进行数据库操作的时候,且约定的交互标准是实体的前提下,在实体中是该使用关系实体的编号作为属性呢?还是将关系实体整体作为属性呢?
举个例子来说:两个实体,一个是person,用户信息,一个是District地域信息,暂时只考虑中国的5级地域层级,district和person是一个典型的0-1:N关系,在N的一端加入0-1一端的编号作为一个字段来存储,下面是用工具生成的数据库实体
public class Person
{
private int _code;
[DataMember]
public int Code {
get { return _code; }
set { _code = value; }
}
private string _name;
[DataMember]
public string Name {
get { return _name; }
set { _name = value; }
}
private int _disCode;
[DataMember]
public int DisCode {
get { return _classCode; }
set { _classCode = value; }
}
}
[DataContract]
public class District
{
private int _code;
[DataMember]
public int Code {
get { return _code; }
set { _code = value; }
}
private int _parentCode;
[DataMember]
public int ParentCode {
get { return _parentCode; }
set { _parentCode = value; }
}
private string _name;
[DataMember]
public string Name {
get { return _name; }
set { _name = value; }
}
}
生成之后,我们可能需要对实体进行调整,因为自动生成的肯定和我们的业务关系不大,它只能原始的反映数据库的结构,帮我们减少一些体力劳动,切忌,一定要修改,出来混迟早要还的。
我们就像把关系属性的code,改成关系实体本身,修改如下
public class Person
{
private int _code;
[DataMember]
public int Code {
get { return _code; }
set { _code = value; }
}
private string _name;
[DataMember]
public string Name {
get { return _name; }
set { _name = value; }
}
private District _district;
[DataMember]
public District District {
get { return _district; }
set { _district = value; }
}
}
[DataContract]
public class District
{
private int _code;
[DataMember]
public int Code {
get { return _code; }
set { _code = value; }
}
private District _parent;
[DataMember]
public District Parent {
get { return _parent; }
set { _parent = value; }
}
private string _name;
[DataMember]
public string Name {
get { return _name; }
set { _name = value; }
}
}
比较明显的就是关系,原来都是使用code,现在都换成关系本身了,包括原来是parentcode的属性,也换成parent,类型从int变成了district,看起来很好理解了,而且很容易的想到应该可以增加的好处,使用person.District就可以知道一个人所在地域的名称,要不然光有编号,还需要用编号来查询名称,甚至说显示的时候,不能只显示person的第五级地域信息,也就是不能光显示人员在那个村子,要显示完整的省-市-县-乡-村,这个时候如果地域中由一个District类型的parent就比由一个int类型的parentCode要好用的多。
因为silverlight是RIA应用,而且在客户端还是有一个运行环境的,虽然运行在浏览器中,但是还是有点类似C/S结构的,只是受到一些限制,同时有自己的一些运行机制。不能直接访问数据库,只能依赖一些服务性的接口来完成数据库交互。wcf是一种可选的方案,wcf交互的标准是SOA,数据都是被序列化成xml,使用wcf之后,往返于client和server端的数据会被序列化,可以使用wcf特有的DataContract和DataMember来标记需要序列化的数据,在上面的实体类中我们已经加上标记。
加入标记的数据在服务器端就会被反序列化成服务器实体,传输的时候又要将加入标记的数据序列化成xml,在客户端接收数据之后,又会将加上标记的属性反序列化成客户端实体,因为每次要传输数据在客户端的运行时中运行,这就需要我们设计的实体类要减少传输的量,减少传输的数据冗余。
就拿前面类来说把,如果现在有一个addperson的功能,其实数据库需要的就是一个districtcode就可以保存了,不需要知道disrictname和其他的信息,所以在person中的属性districtcode还不能完全由int改成district类型的district,要不让会多序列化一些name和district的其他属性,如果district有了parent和child的话,那就不止多一两个了,就是说这时候还是用int的districtcode就可以满足要求了,至少需要保留两个属性,一个int的districtcode,一个是district的district,一个用在保存用户的时候,districtcode赋值,district=null;。
很多时候,很多实体,像我们原来开发ASP.NET的话,关系实体的code,都会被修改成关系实体本身,其实在silverlight中,或者说在客户端有运行环境的情况下,其实一个code就可以了,因为
1)其他的信息客户端可能早就从服务器获取了,例如code和name的对应关系,因为不像ASP.NET是无状态的,客户端看到的都是html,再丰富的页面到了客户端也都是html+JavaScript,类似silverlight这种RIA的话,客户端有点像C/S,可以有全局变量,可以建立客户端缓存,给client一个code,client就会根据本地信息知道code对应的name。
2)ASP.NET 这种web应用的话,代码都是运行在server端的,所以由一个code不够,最好是由一个district实体,想要什么属性都可以,而且不存在数据要传输到client,就是几个server之间传输,搞个缓存加快速度,但是silverlight的代码是运行在client端的,就好像一个C/S程序,而且数据从server到client需要序列化,应该尽量减少传输的数据量。
所以,有时候,一个code就够了。总之,满足要求即可,不必要追求摆放一个关系实体和一个parent好看和好理解的固定模式,可以视情况而定。
发表评论
-
NET 应用架构指导 V2 学习笔记(十六) 服务层设计指导
2010-06-04 00:13 527如果你的应用是通 ... -
NET 应用架构指导 V2 学习笔记(十七) 组件设计指导
2010-06-05 00:48 627组件提供了一种将 ... -
NET 应用架构指导 V2 学习笔记(十八) 表现层组件设计指导
2010-06-05 21:09 497本章讲述的是你在设计用户界面组件和表现层逻辑组件的时候应该 ... -
NET 应用架构指导 V2 学习笔记(十九) 表现层组件设计指导
2010-06-06 06:15 5605 决定数据绑定的 ... -
NET 应用架构指导 V2 学习笔记(二十) 业务组件设计指导
2010-06-07 06:58 581前言 业务组件 ... -
微软企业库5.0学习笔记(四十二)异常处理模块
2010-06-14 00:04 808企业库的异常处理 ... -
关于程序员在30岁、35岁之后怎么办的新思考
2010-06-14 10:40 596首先给大家问个好 ... -
NET 应用架构指导 V2 学习笔记(二十四) 跨层关注问题
2010-06-17 20:00 552概况 大部分的 ... -
微软企业库5.0学习笔记(四十三)数据验证模块
2010-06-19 08:07 967概况 任何接受用户或者是其他系统输入的应用,一定要确保 ... -
关于项目进度慢的思考----如何提高整体开发效率
2010-06-21 23:42 774我们都是软件行业 ... -
微软企业库5.0学习笔记(四十四)实战数据验证模块
2010-06-23 19:22 7971 在业务对象上添加验证 添加对程序集【Microso ... -
微软企业库5.0学习笔记(四十五)实战数据验证模块----高级篇
2010-06-24 19:41 9511、添加自定义的提示信息 验证失败的提示信息可以自定义 ... -
面向对象类设计的五大原则(一)单一职责原则Single Responsibility Principle
2010-06-29 15:45 738引言 面向对象类设计,或者说是面向对象设计,有五大原则 ... -
《深入浅出设计模式-中文版》读书笔记 开篇乱弹(一)
2010-07-01 06:42 624oreilly的《Head.First ... -
《深入浅出设计模式-中文版》读书笔记-继承与组合(三)
2010-07-03 16:53 581经过上一次的改造 ... -
《深入浅出设计模式-中文版》读书笔记-观察者模式(四)
2010-07-06 06:34 604今天要接触的是观 ... -
利用attribute实现简单的ORM
2010-07-09 15:27 649我不知道NH的ORM具 ... -
系统内部模块(子系统)之间的耦合以及模块(子系统)划分
2010-07-14 13:02 790题外话 最近已经在努力学习了,学习基本功,学习设计模式 ... -
《深入浅出设计模式-中文版》读书笔记-工厂模式(五)
2010-07-16 12:46 671今天给大家带来的是:工厂模式。 我们在代码中创建一个对 ... -
Head.First.Object-Oriented.Design.and.Analysis《深入浅出面向对象的分析与设计》读书笔记(一)
2010-07-18 21:47 640题外话 又是一本Head.First系列的书,这个系列 ...
相关推荐
silverlight+wcf仓库管理源码.rarsilverlight+wcf仓库管理源码.rarsilverlight+wcf仓库管理源码.rarsilverlight+wcf仓库管理源码.rar
silverlight+Wcf实现登录silverlight+Wcf实现登录
1 安装开发环境 操作系统:Windows 7 专业版 Vs2010:cn_visual_studio_2010_ultimate_x86_dvd_532347.iso这是微软送的一个版本,先前在微软下载...3 建立一个vs2010+silverlight4+wcf的项目 为了少啰嗦,大家看图吧。
silverlight+wcf仓库管理系统源码 仓库源码 开发语言 : C# 数据库 : SQL2008 开发工具 : VS2010 源码类型 : WebForm 注意:不带技术支持,有帮助文件,虚拟商品,发货不退,看好再拍。 源码描述: silverlight +...
Silverlight+WCF配置具体方法 讲解
Silverlight + WCF 数据压缩源码和例子(看readme.txt)
在IIS上部署Silverlight+WCF项目教程。
silverlight+wcf n维拼图游戏
Silverlight+WCF 员工管理系统
silverlight+wcf+linq简单实例, 客户端用Silverlight通过wcf远程调用服务器数据库中数据,实现数据的添删改
自己写的一个silverlight+wcf+LinqToSql的demo,带数据库的.
silverlight+WCF上传文件、下载文件,下载可用
Chapter 1: Introducing the ADO.NET 4.0 Entity Framework..................................1 Chapter 2: The Entity Data Model ........................................................13 Chapter 3: The ...
(silverlight +WCF +SQL)联合开发时,需要用的CODESIMTH 三层模板
asp.net+wcf+entity framework
silverlight+wcf实现增删改查 通过引用wcf服务来实现对数据库的交互
一个silverlight 图片上传,下载的功能, 配置WCF,可以上传4m图片,
Silverlight+WCF 实战-网络象棋源码 1。按钮事件”求和、认输、返回大厅、退出系统“ 2。棋谱及棋谱回放,能过该回放能定义棋子自动回放,并可定义棋子每步的间隔时间。 3。在线用户 4。聊天窗口。
1、Silverlight WCF服务 Chart画图 StackedColumn 堆积柱形图 Column 柱形图 Pie 饼图 Line 拆线图 2、利用SLVisifire.Charts.dll,后台直接动态生成StackedColumn、Column、Pie、Line,几个实例都在一个页面,其中...
Silverlight+Wcf大文件上传,没有使用ASP.NET服务器缓存机制,在Silverlight客户端把大文件分割成二进制数组,每次往服务器上写100K,可断点续传。测试请把客户端配置文件中的服务地址改为自己用vs2010生成的地址。