航空订票系统-业务准备
2011-05-05 01:13 Chanx 阅读(841) 评论(0) 编辑 收藏 举报一、构建业务对象项目
根据数据库设计以及具体的业务需求,构建系统的业务对象,业务对象并不是与数据表一一对应的....根据不同情况而定....
被构建的业务对象,只是用来保存相关对象的数据,因此该类中只包含属性,不包含方法....
下面是航空订票系统的业务对象项目结构:
其中Custom类的实现代码:
public class Custom
{
public int c_id { get; set; }
public string c_name { get; set; }
public string c_pwd { get; set; }
public string c_iden { get; set; }
public string c_sex { get; set; }
public string c_tel { get; set; }
public string c_email { get; set; }
public string c_time { get; set; }
public int c_integral { get; set; }
public int c_level { get; set; }
}
其他类的实现代码同上述方式......
二、数据访问层
数据访问层主要实现数据库中相关的数据操作,并将得到的相关业务对象返回到业务逻辑项目中....
该项目中定义的类跟上述业务对象一一对应....
航空订票系统通过内置的LINQ to SQL框架,对SQL server数据库的各种操作,通过创建对象,关系映射,利用LINQ的各种标准运算符,实现数据访问层的构建......
2.1 创建关系映射
在数据访问项目中,新建LINQ to SQL类
将数据库中相应的数据表拖动到设计器....创建对象、关系间的映射.....
那么,这样就实现了相关数据表实体到对象的映射,我们可以直接使用这些对象对数据库构建相关业务........
2.2 实现业务访问层
那么,在前面,我们创建了业务对象以及关系映射以后,我们可以使用LINQ操纵数据对象....
根据数据库中的表,我们构建7个访问类.....
下面拿其中的CustomDB类来说明:
1 namespace DataAccess
2 {
3 public class CustomDB:ICustom
4 {
5 private AirlineMapDataContext db = new AirlineMapDataContext();
6
7 /// <summary>
8 ///验证用户名和用户密码
9 /// </summary>
10 public bool checkName(string t1,string t2)
11 {
12 var c = from cus in db.Customers
13 where cus.c_name == t1 && cus.c_pwd==t2
14 select cus;
15 if (c != null)
16 {
17 return true;
18 }
19 else
20 {
21 return false;
22 }
23 }
24
25 /// <summary>
26 ///通过id查询会员
27 /// </summary>
28 public Custom GetItem(int id)
29 {
30 IQueryable<Custom> c = from cus in db.Customers
31 where cus.c_id == id
32 select new Custom { c_id = cus.c_id, c_name = cus.c_name, c_pwd = cus.c_pwd, c_iden = cus.c_iden, c_sex = cus.c_sex, c_email = cus.c_email, c_tel = cus.c_tel, c_level = cus.c_level, c_integral = cus.c_integral, c_time = cus.c_time };
33 Custom k = c.Single();
34 return k;
35 }
36
37 /// <summary>
38 ///通过名称查询会员
39 /// </summary>
40 public Custom GetItem(string str)
41 {
42 IQueryable<Custom> c=from cus in db.Customers
43 where cus.c_name==str
44 select new Custom{c_id=cus.c_id, c_name = cus.c_name,c_pwd=cus.c_pwd, c_iden = cus.c_iden, c_sex = cus.c_sex, c_email = cus.c_email, c_tel = cus.c_tel, c_level = cus.c_level, c_integral = cus.c_integral, c_time = cus.c_time };
45 Custom k = c.Single();
46 return k;
47 }
48
49
50 /// <summary>
51 ///获取相应的记录数 分页
52 /// </summary>
53 public PagedList<Custom> GetList(int? StartRow, int PageSize)
54 {
55 IQueryable<Custom> c=from cus in db.Customers
56 select new Custom { c_id = cus.c_id, c_name = cus.c_name, c_pwd = cus.c_pwd, c_iden = cus.c_iden, c_sex = cus.c_sex, c_email = cus.c_email, c_tel = cus.c_tel, c_level = cus.c_level, c_integral = cus.c_integral, c_time = cus.c_time };
57 PagedList<Custom> m = c.ToPagedList(StartRow ?? 1, PageSize);
58 return m;
59 }
60
61 /// <summary>
62 ///查询所有记录总数 分页
63 /// </summary>
64 public string QueryCount(int startRow, int PageSize, string iden, string name)
65 {
66 int tem_start = startRow;
67 int tem_limit = PageSize;
68 var c = from cus in db.Customers
69 where cus.c_iden.Contains(iden) || cus.c_name.Contains(name)
70 orderby cus.c_id
71 select new { cus.c_id, cus.c_name, cus.c_pwd, cus.c_iden, cus.c_sex, cus.c_email, cus.c_tel, cus.c_integral, cus.c_level, cus.c_time };
72 int m = c.Count(); //所有记录数
73 int pageNum = tem_start / tem_limit; //共有页数
74 int pageSize = tem_limit;
75 c = c.Skip(pageSize * pageNum).Take(pageSize);
76 string JsonSource = jsonHelper.Jso_ToJSON(c);
77 string strJsonSource = @"{""totalCount"":""" + m + "";
78 strJsonSource = strJsonSource + @""",""data"":" + JsonSource + "}"; //Grid的分页区显示所有记录数增加totalCount信息
79 return strJsonSource;
80 }
81
82
83 /// <summary>
84 ///插入数据
85 /// </summary>
86 public bool add(Custom custom)
87 {
88 Customers c = new Customers();
89 c.c_name = custom.c_name;
90 c.c_pwd = custom.c_pwd;
91 c.c_iden = custom.c_iden;
92 c.c_sex = custom.c_sex;
93 c.c_email = custom.c_email;
94 c.c_tel = custom.c_tel;
95 c.c_level = 0;
96 c.c_integral = 0;
97 c.c_time = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
98 db.Customers.InsertOnSubmit(c);
99 db.SubmitChanges();
100 return true;
101 }
102
103
104 /// <summary>
105 ///更新记录
106 /// </summary>
107 public bool update(int id,Custom cus)
108 {
109 Customers c = db.Customers.Where(o => o.c_id == id).Single();
110 c.c_name = cus.c_name;
111 c.c_pwd = cus.c_pwd;
112 c.c_email = cus.c_email;
113 c.c_tel = cus.c_tel;
114 c.c_iden = cus.c_iden;
115 c.c_sex = cus.c_sex;
116 c.c_integral = cus.c_integral;
117 c.c_level = cus.c_level;
118 db.SubmitChanges();
119 return true;
120 }
121
122 /// <summary>
123 ///删除数据
124 /// </summary>
125 public bool delete(string iden)
126 {
127 Customers c = db.Customers.Single(o => o.c_iden == iden);
128 db.Customers.DeleteOnSubmit(c);
129 db.SubmitChanges();
130 return true;
131 }
132 }
133 }
主要实现了对客户表的数据统计,指定数据的添加,删除,更改等.....
其中,1、checkname()方法检验客户信息,返回bool型到控制层....2、getItem()方法使用重载根据指定的用户id和用户名访问Custom类型的结果...
3、GetList方法使用了分页控件MvcPager 返回PageList<>类型结果.....4、Querycount()该方法是将符合条件的数据查询出来并序列化,返回字符串,在控制层将序列化的字符传送到js.....5、剩下几个方法是最基本的对数据库的添加,更新,删除操作,返回均为是否成功的bool......
2.3 对象序列化的方法
在对象序列化为字符串和反序列两个方法中,感谢夜雨瞳的指导,那么第三个方法是将LINQ查询的数据类型(非Object类型)序列化......
1 public static class jsonHelper
2 {
3 //将对象序列化为字符串
4 public static string Jso_ToJSON(this object tem_obj)
5 {
6 JavaScriptSerializer tem_serializer = new JavaScriptSerializer();
7 return tem_serializer.Serialize(tem_obj);
8 }
9
10
11 //将字符串反序列化为对象
12 public static T Jso_DeJSON<T>(this string json)
13 {
14 JavaScriptSerializer serializer = new JavaScriptSerializer();
15 return serializer.Deserialize<T>(json);
16 }
17
18 public static string Obj2Json<T>(T data)
19 {
20 try
21 {
22 System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(data.GetType());
23 using (MemoryStream ms = new MemoryStream())
24 {
25 serializer.WriteObject(ms, data);
26 return Encoding.UTF8.GetString(ms.ToArray());
27 }
28 }
29 catch
30 {
31 return null;
32 }
33 }
34 }
总结:
基本上的业务对象以及关系映射,和业务访问层的实现都是按照这种思路,不过的是根据不同的功能需求,在不同的数据类创建不同的方法去实现....数据类的创建还有一个比较关键的就是继承接口....接口的继承让系统未来扩展提供了很大的方便.....但是本系统考虑欠佳,或许存在比较大的隐患......
今天太晚了,明天赶着上课,那么,接下来,我将控制层放到了MVC项目中的Controls文件夹中,方面对View的数据处理.....具体的方法实现以及前后台页面实现,再一一讲述下.....
讲述的不太好,希望大家多多包涵,技术方面也有很多误区,希望大家拍砖指正.....
大家晚安!!!!!!
分页控件MvcPager下载地址:http://mvcpager.codeplex.com/releases/view/42912