移动设备数据访问技术二
我们这篇开始讲:创建 N 层数据应用程序
1.“N 层”数据应用程序是指用于访问数据且分为多个逻辑层的应用程序。通过将应用程序组件分离到相对独立的层中,
可以提高应用程序的可维护性和可伸缩性。该结构之所以具有这种优点,是因为它有利于采用可应用于单个层而无需重新设计整个解决方案的新技术。
N 层体系结构包括一个表示层、一个中间层和一个数据层。中间层通常包括数据访问层、业务逻辑层和共享组件(例如身份验证和验证)。
数据层则包括关系数据库。N 层应用程序通常将敏感信息存储在中间层的数据访问层中,目的是将它们与访问表示层的最终用户隔离。
2.在 N 层应用程序中,分离各层的一种方法是为要包括在应用程序中的每一层创建相互独立的项目。
类型化数据集包含一个 DataSet Project 属性,该属性决定了生成的数据集和 TableAdapter 代码应归属到哪些项目中。
3.本实例演示如何使用“数据集设计器”将数据集和 TableAdapter 代码分离到相互独立的类库项目中。
分离数据集和 TableAdapter 代码后,将创建 WCF服务以调入数据访问层。
最后,要创建一个 Windows 窗体应用程序并将其用作表示层。该层将访问数据服务中的数据。
4.新建一个winForm应用程序:RefactorNTierWalkthrough
5.创建用于保存数据集的类库:DataEntityTier
6.创建用于保存TableAdapter的类库:DataAccessTier
7.创建类型化数据集。类型化数据集通过单个项目中的数据集类(包括 DataTable 类)和 TableAdapter 类创建 (所有这些类都将生成到单个文件中)。
在将数据集和 TableAdapter 分离到不同的项目中时,移到另一个项目中的是数据集类,TableAdapter 类则留在原始项目中。
因此,应在最终包含 TableAdapter 的项目(DataAccessTier 项目)中创建数据集。
a)选中项目:DataAccessTier
b)添加数据源
此时项目结构:
8.将 TableAdapter 与数据集分离
创建数据集后,接着是要将生成的数据集类与 TableAdapter 分离。
通过将“数据集项目”属性设置为要用于存储分离出的数据集类的项目的名称,可以达到此目的。
a)双击NorthwindDataSet.xsd
b)单击设计器上的空白区域。
c)在“属性”窗口中查找“数据集项目”节点。
d)在“数据集项目”列表中,单击“DataEntityTier”。
数据集和 TableAdapter 被分离到两个类库项目中。最初包含整个数据集 (DataAccessTier) 的项目现在只包含 TableAdapter。
“数据集项目”属性中指定的项目 (DataEntityTier) 则包含类型化数据集:NorthwindDataSet.Dataset.Designer.cs。
此时的项目结构如下:
9.创建wcf服务应用程序:DataService
10.右击CustomersTableAdapter,点击“添加查询”
11.GetOrders同10
12.向数据服务中添加对数据实体和数据访问层的引用
13.修改DataService中IService1.cs的代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
[ServiceContract] public interface IService1 { [OperationContract] DataEntityTier.NorthwindDataSet.CustomersDataTable GetCustomers(); [OperationContract] DataEntityTier.NorthwindDataSet.OrdersDataTable GetOrders(); }
修改DataService中Service1.cs的代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class Service1 : IService1 { public NorthwindDataSet.CustomersDataTable GetCustomers() { var customersTableAdapter = new DataAccessTier.NorthwindDataSetTableAdapters.CustomersTableAdapter(); return customersTableAdapter.GetCustomers(); } public NorthwindDataSet.OrdersDataTable GetOrders() { var ordersTableAdapter = new DataAccessTier.NorthwindDataSetTableAdapters.OrdersTableAdapter(); return ordersTableAdapter.GetOrders(); } }
14.发布wcf服务到iis
15.RefactorNTierWalkthrough项目添加对DataEntityTier项目的引用,
添加wcf服务引用
16.向窗体中添加两个数据绑定 DataGridView
后台代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
private void button1_Click(object sender, EventArgs e) { ServiceReference1.Service1Client client = new ServiceReference1.Service1Client(); northwindDataSet.Customers.Merge(client.GetCustomers()); northwindDataSet.Orders.Merge(client.GetOrders()); }
17.增加服务所允许的最大消息大小
由于服务会返回 Customers 和 Orders 表中的数据,而 maxReceivedMessageSize 的默认值还不够大,无法容纳这些数据,
因此必须予以增加。将该值更改为 6553600。更改操作将在客户端上执行,此操作会自动更新服务引用。
采用较小的默认大小,旨在降低遭受拒绝服务 (DoS) 攻击的可能性。
18.此n层就做好了.
未完待续,敬请期待...
转载请注明出处:http://www.cnblogs.com/refactor