ASP.NET Web开发框架之七 开发流程与模式

开发 后端
经过前面六篇文章的讲解,基本的理论已经介绍完毕,这一篇进行实战练习,讨论如何从头开始开发一个完整的ASP.NET 页面,并进行数据读写,业务逻辑设定。

经过前面六篇文章的讲解,基本的理论已经介绍完毕,这一篇进行实战练习,讨论如何从头开始开发一个完整的ASP.NET 页面,并进行数据读写,业务逻辑设定。

1 设计数据库表 Table Design

公司表存放系统中的公司实例,表示进行业务往来的实体,它的表结构如下脚本所示

  1. CREATE TABLE [dbo].[Company](  
  2.     [CompID] [numeric](18, 0) IDENTITY(1,1) NOT NULL,  
  3.     [ParentCompID] [numeric](18, 0) NULL,  
  4.     [CompTypeID] [numeric](18, 0) NOT NULL,  
  5.     [CompNO] [varchar](20) NOT NULL,  
  6.     [CompName] [varchar](50) NOT NULL,  
  7.     [Corporation] [varchar](20) NULL,  
  8.     [CorpMobile] [varchar](20) NULL,  
  9.     [CorpTel] [varchar](20) NULL,  
  10.     [Address] [varchar](100) NULL,  
  11.     [Tel1] [varchar](20) NULL,  
  12.     [Tel2] [varchar](20) NULL,  
  13.     [Fax] [varchar](20) NULL,  
  14.  CONSTRAINT [PK_TCOMPANY] PRIMARY KEY CLUSTERED   
  15. (  
  16.     [CompID] ASC 
  17. )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ONON [PRIMARY]  
  18. ON [PRIMARY

2 实体映射 ORM Mapping

打开LLBL Gen,连接到数据库并更新实体,把上面的Company表映射到实体CompanyEntity。设计字段名时,最好以简明,可读性好的词命名,这样可以增强映射到实体上的属性的可读性。

image

如果表与表之前有关联,LLBL Gen会自动生成表之间的关联。

3 数据读写接口与实现的产生 Interface and Service Implementation

这一步骤也是自动化的,不需要额外的脑力活动。以Code Smith打开模板Interface.cst和Manager.cst,选择表对象为Company,生成代码,把这此代码拷贝到Visual Studio的项目中即可。

image

请在项目的Source\Maintenance\Template路径下获取上面所提到的两个模板,用以生成数据读写接口与实现代码。

4  ASP.NET 页面布局与编程 ASP.NET Page Layout Design and Coding

向Web项目中添加一个ASP.NET 页面,命名为company.aspx。我推荐以小写命名Web项目的文件夹,文件名和页面类型名称。为了让它具备EntryPageBase的功能,我在页面的首部,添加一个Toolbar,它用来承载工具箱中的系列工具,以进行数据的前后浏览,增加删除工作。其它的地方,以FormRow的方式安排布局。

image

FormRow会为它的Items平均分配宽度,所以每行FormRow最好放置相同的Items以让界面布局看起来美观整齐。

ASP.NET的后台代码看起来是这样的,这里罗列所有的代码,供您参考。

  1. [Function("AIITHD""~/module/company.aspx")]  
  2. public partial class company : EntryPageBase  
  3. {       
  4.         protected override void PageLoadEvent(object sender, EventArgs e)  
  5.         {  
  6.             if (!IsPostBack)  
  7.             {  
  8.                 TransactionType = EntityType.CompanyEntity;  
  9.                 ddlCompanyGroup.InitializeValueListFromEnum(9);  
  10.             }  
  11.             base.PageLoadEvent(sender, e);  
  12.         }  
  13.  
  14.         public override EntityBase2 LoadEntity(string refNo)  
  15.         {  
  16.             ICompanyManager manager = ClientProxyFactory.CreateProxyInstance<ICompanyManager>();  
  17.             CompanyEntity customer = manager.GetCompany(Convert.ToInt16(refNo));  
  18.             return customer;  
  19.         }  
  20.  
  21.         public override void DeleteEntity(EntityBase2 entity)  
  22.         {  
  23.             CompanyEntity user = (CompanyEntity)entity;  
  24.             ICompanyManager manager = ClientProxyFactory.CreateProxyInstance<ICompanyManager>();  
  25.             manager.DeleteCompany(user);  
  26.         }  
  27.  
  28.         public override void SaveEntity(EntityBase2 entity)  
  29.         {  
  30.             CompanyEntity user = (CompanyEntity)entity;  
  31.             ICompanyManager manager = ClientProxyFactory.CreateProxyInstance<ICompanyManager>();  
  32.             manager.SaveCompany(user);  
  33.         }      

首先给页面分配一个功能编码,比如此页面的AIITHD,然后设定的Url属性,这两个同时附加到页面的特性中去。

  1. [Function("AIITHD""~/module/company.aspx")] 

这里有些不足之处,到目前为止我还没有找到根据ASP.NET页面类型,得到它的页面文件。因为ASP.NET的请求处理是以ASPX文件在浏览器中敲入后,发送到服务器来执行的。所以,如果能找到这个办法,则这里的Url设定可以省略。

其次,指定TransactionType = EntityType.CompanyEntity,这用来指定当前页面的实体为CompanyEntity,并对它进行读写操作,与页面相关的数据绑定,回写到数据库中,均需要此属性。紧接着的是三个模板方法,LoadEntity用于加载公司实体,DeleteEntity用于删除,SaveEntity用于保存修改后的实体。这三个方法均是override,它被页面基类调用。

最后执行一下功能编码为AIITHD的功能,来看看效果是怎样的。在页面的右上角输入功能编码,点击Go按钮。

image

关于数据绑定,所有的秘密藏在页面文件中,我以Company No为例子,请看它的页面文件

  1. <ext:TextBox ID="tbxName" runat="server" Label="Company No" DataBindingString="CompanyEntity:CompNo">  
  2.                    </ext:TextBox> 

它的DataBindingString属性,在读取数据时,将实体属性绑定到此控件,在保存时,又读取这个值,回写到实体中并保存到数据库中,这样可以减少大量重复的代码。

原文链接:http://www.cnblogs.com/JamesLi2015/archive/2012/10/08/2714794.html

【编辑推荐】

  1. ASP.NET Web开发框架项目介绍
  2. ASP.NET Web开发框架之一 功能导航
  3. ASP.NET Web开发框架之二 数据输入窗体
  4. ASP.NET Web开发框架之三 报表开发
  5. ASP.NET Web开发框架之四 查询
  6. ASP.NET Web开发框架之五 控件扩展
  7. ASP.NET Web开发框架之六 数据库文档方法
责任编辑:张伟 来源: James Li的博客
相关推荐

2012-09-25 09:31:58

ASP.NETC#Web

2012-09-26 09:46:29

ASP.NETWeb框架

2009-07-29 09:38:06

Web开发ASP.NET

2012-09-18 11:02:10

ASP.NETC#Web Forms

2012-09-20 09:54:12

ASP.NETWebC

2009-07-30 13:45:40

ASP.NET开发模式MVC模式

2012-09-18 14:32:08

ASP.NETC#

2012-09-29 13:20:30

ASP.NETWeb框架

2012-09-19 14:10:58

ASP.NETWebC

2014-06-30 09:22:38

ASP.NETBootstrap

2009-07-24 10:14:22

ASP.NET开发

2009-04-20 13:34:27

ASP.NET视频教程Web开发

2009-03-09 10:28:45

AJAXASP.NETWEB

2009-08-06 15:21:45

ASP.NET控件开发RenderConte

2009-08-05 10:17:55

ASP.NET TheASP.NET开发技巧

2009-08-04 10:43:59

ASP.NET控件开发

2009-08-05 10:36:08

开发ASP.NET

2009-07-20 12:59:53

ASP.NET MVCASP.NET框架的功

2009-08-13 09:01:00

ASP.NET开发Web标准

2009-08-05 18:46:21

ComboBox显示ASP.NET控件开发
点赞
收藏

51CTO技术栈公众号