.net下分层架构系统的开发技术规范(2)

原创 2004年03月16日 15:57:00

五.  项目的分层定义和编码规范

1.        数据实体层的定义和编码规范

这一层主要定义类型化数据集的XML架构(XSD)。是数据库的内存表示,建立架构后代码由系统自动生成。

1)        添加数据集:添加à添加新项à数据集;

2)        定义数据表架构:

(1)    单表形式:从“服务器资源管理器”中将单表拖至设计界面,系统将自动生成表结构;

(2)    多表形式:

方法一.照上述方法生成多个表,然后手工添加表间关联(如果有的话);

      方法二.照上述方法生成基本表,然后手工添加其他相关字段,组成一张表;

而他的XML格式这是这样的:

<?xml version="1.0" encoding="utf-8" ?>

<xs:schema id="AddressData" targetNamespace="http://tempuri.org/AddressData.xsd" elementFormDefault="qualified"

     attributeFormDefault="qualified" xmlns="http://tempuri.org/AddressData.xsd" xmlns:mstns="http://tempuri.org/AddressData.xsd"

     xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

     <xs:element name="AddressData" msdata:IsDataSet="true">

         <xs:complexType>

              <xs:choice maxOccurs="unbounded">

                   <xs:element name="City">

                       <xs:complexType>

                            <xs:sequence>

                                 <xs:element name="CityID" msdata:ReadOnly="true" msdata:AutoIncrement="true" type="xs:int" />

                                 <xs:element name="Abbr" type="xs:string" />

                                 <xs:element name="NameGuid" msdata:DataType="System.Guid, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"

                                     type="xs:string" minOccurs="0" />

                                 <xs:element name="ProvinceID" type="xs:int" />

                                 <xs:element name="Remark" type="xs:string" minOccurs="0" />

                                 <xs:element name="Name" type="xs:string" minOccurs="0" />

                            xs:sequence>

                       xs:complexType>

                   xs:element>

               ……

2.          SQL层的定义和编码规范

这一层定义用于与数据库交互的SQL语句。

这一层负责生成用于操作数据库的SQL语句。根据要操作的数据实体层来分别的定义这一层要实现的方法,在本项目组中,我们一般只需要定义选择查询所需要的SQL语句。

这里的方法中所做的工作全部是拼装出一个用于实现所需求的功能的SQL语句。如:

public static string strGetLogonLog = "SELECT LogonLog.* FROM LogonLog";

 

              public static string GetLogonLogByUserName(string userName)

              {

                     return strGetLogonLog

                            + " WHERE (UserName = N'" +userName+ "')";

              }

3.          数据访问层的定义和编码规范

这一层负责操作数据库。

这一层负责对数据库进行各种操作。根据要操作的数据实体层来分别的定义这一层要实现的方法,在本系统中,一般要包括读取数据的方法和将数据更新回数据库的方法。

在这一层向上,数据将可能有两个流向:如果本模块有商务规则,数据将流向商务规则层;如果本模块没有商务规则,则数据将流向商务界面层。

编码示例如下:

public MenuData GetMenu()

              {

                     MenuData ds = new MenuData();

 

                     DatabaseExecute dbExec = new DatabaseExecute();

                     dbExec.GetData(ds.Menu,MenuSQL.strGetMenu);

 

                     return ds;

              }

 

              public void UpdateMenu(MenuData ds)

              {

                     DataTableExtend dt = new DataTableExtend(ds.Menu,"Menu");

                     DatabaseExecute dbExec = new DatabaseExecute();

                     dbExec.ModifyDataBase(dt);

              }

4.        商务规则层的定义和编码规范

商务规则层负责实现业务逻辑,根据不同的业务逻辑需求,会有不同的实现方式。

商务规则层的代码开发规范不再赘述,只提出以下几点要注意的地方:

1)        所有的商务规则都在这一层实现。

2)        对于计算字段要分清字段值得到的计算公式。

3)        接口要尽量清晰。

举例如下:

 

public static ContractPaidListData CalculateFirstPaid(string contractGuid)

              {

                     ContractS contractS = new ContractS();

                     ContractData.ContractRow contract = contractS.GetContractByGuid1(contractGuid).Contract[0];

                     ContractChargeDetailData contractChargeDetailDS = new ContractChargeDetailData();

                     ContractChargeDetailS contractChargeDetailS = new ContractChargeDetailS();

                     contractChargeDetailDS = contractChargeDetailS.GetContractChargeDetailByContractGuidAndOneFee(contractGuid);

                     foreach (ContractChargeDetailData.ContractChargeDetailRow contractCharge in contractChargeDetailDS.ContractChargeDetail)

                     {

                            decimal price;

                            int amount = 1;

                            if (!contractCharge.IsRealPriceNull())

                            {

                                   price = contractCharge.RealPrice * amount;

                            }

                            else if (!contractCharge.IsDiscountNull())

                            {

                                   price = contractCharge.StandardPrice *contractCharge.Discount/100 * amount;

                            }

                            else

                            {

                                   price = contractCharge.StandardPrice * amount;

                            }

                            ContractPaidListData contractPaidDS = new ContractPaidListData();

                            ……

5.        商务界面层的定义和编码规范

这一层提供界面和中间层的接口。

在这一层向下,数据将可能有两个流向:如果本模块有商务规则,数据将流向商务规则层;如果本模块没有商务规则,则数据将流向商务界面层。

这一层负责为界面层提供数据接口。根据要提供的接口功能分别的定义这一层要实现的方法,一般包括,InsertXXX(数据集)UpdateXXX(数据集)DeleteXXX(数据集)LoadXXX()(用于返回一个数据集)LoadXXXByXX(字段1,字段2…)(用于根据某个字段或多个字段来返回一个数据集)

这一层要做的工作很少,只是起一个定义接口和传递数据的工作。如果本模块有商务规则,则先实例化一个商务规则层中对应的类并调用其中相应的方法;如果本模块没有商务规则,则先实例化一个实体访问层种对应的类并调用其中相应的方法。

示例如下:

public SqlDataAdapter GetCountry()

              {

                     try

                     {

                            CountryS countryS = new CountryS();

                            SqlDataAdapter m_Sql = countryS.GetCountry();

                            return m_Sql;

                     }

                     catch(Exception e)

                     {

                            throw e;

                     }

              }

6.        界面层的定义和编码规范

界面层提供用户界面并处理用户操作。

这一层应尽量与后台分离,即,界面代码的作用应当主要是处理用户操作而不是业务逻辑的实现。其目的是为了将来方便的更换界面甚至更改平台,如从C/S转向B/S或者想反。

在这一成上得工作就是界面与数据实体的同步,如把数据显示到界面上或者把界面数据的更改同步回数据实体:

public void InitControl()

         {

              try

              {

                  

                       if (GetRequest() == null)

                       {

                            title.Text="新增:";

                            this.SetTextNull();

                            btnDel.Visible = false;

                       }

                       else

                       {

                            title.Text="修改、删除:";

                            btnSubmit.Value="确定修改";

                            btnReset.Visible=false;

                            CityData cityDS = new CityData();

                            CityF.GetCitiesByGuid(GetRequest()).Fill(cityDS.Cities);

                            CityData.City city = cityDS.Cities[0];

                            txtCityName.Text = city.CityName;

 

                        ……

 

private void btnSubmit_ServerClick(object sender, System.EventArgs e)

         {

              try

              {

                   if(!Page.IsValid)

                   {

                       this.ValidateMessage();

                   }

                   else

                   {

                       if (GetRequest() == null)

                       {

                            CityData cityDS = new CityData();

                            CityData.City city = cityDS.Cities.NewCity();

                            city.Guid = GUIDGenerator.GetNewGUID();

                            city.CityName = txtCityName.Text.Trim();

                            ……

六.  项目各层暴露的接口

1.        SQL层的接口

这一层暴露的接口主要是为数据访问层提供的各种操作SQL语句,如用于各种方式的查询、新增、修改、删除的SQL等等。

对于传入方法中的参数,Get方法传入一个或若干个需要用于查询的参数,为字符串值,InsertUpdateDelete方法不传入任何参数;而对于返回值,所有的方法全部返回一个字符串。

例如:

public static System.String DeleteCity (  )

public static System.String GetCities (  )

public static System.String GetCitiesByAbbr ( System.String cityName )

public static System.String InsertCity (  )

public static System.String UpdateCity (  )

但在本项目组中,一般只需要写Get方法。

2.        数据访问层的接口

这一层暴露的接口则是供上层调用以对数据库做各种操作。

对于Load方法,首先获取数据库连接并打开,然后利用SQL定义层中定义的方法和刚才的数据库连接实例化一个SqlDataAdapter并将其作为返回值返回。返回前将数据连接关闭;

对于Update方法,首先获取数据库连接并打开,然后对类型化数据集中的数据进行操作。操作中,先利用SQL定义层中定义的方法和刚才的数据库连接实例化一个SQLCommand,然后将对应数据值赋给参数并执行SQLCommand。操作完成后返回操作是否成功的布尔值。返回前将数据连接关闭。

例如:

public static System.Data.SqlClient.SqlDataAdapter GetCities (  )

public static System.Data.SqlClient.SqlDataAdapter GetCitiesByAbbr ( System.String cityName )

public static System.Boolean UpdateCities ( Capitalnet_MIS.Common.EntityDefinitions.CityData cityDS )

3.        商务规则层的接口

商务规则层的接口并没有一个统一的规范,根据实际需要而定。

例如:

public static Capitalnet_MIS.Common.EntityDefinitions.ContractPaidListData CalculateContractAmount ( System.DateTime date1 , System.DateTime date2 , System.Decimal total , System.Decimal paidTotal , System.Decimal unPaidTotal )

public static Capitalnet_MIS.Common.EntityDefinitions.ContractPaidListData CalculateFirstPaid ( System.String contractGuid )

4.        商务界面层的接口

这一层的接口很关键,因为这一层起一个连接界面层和中间层的作用。

对于传入方法中的参数,Get方法传入一个或若干个需要用于查询的参数,为字符串值, Update方法传入一个强类型的数据集;而对于返回值,Load方法返回一个类型化的数据集, Update方法返回一个布尔值。

例如:

public static System.Data.SqlClient.SqlDataAdapter GetCities (  )

public static System.Data.SqlClient.SqlDataAdapter GetCitiesByAbbr ( System.String cityName )

public static System.Boolean UpdateCities ( Capitalnet_MIS.Common.EntityDefinitions.CityData cityDS )

七.  界面逻辑

界面逻辑如下图所示:

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

.net下分层架构系统的开发技术规范

 要开发出专业化的软件产品,在编码阶段,必须严格贯彻一定的代码开发准则,这会减少程式的隐含错误,同时使程式的内部结构清晰。从而开发出少错误、易维护的优质程式,使得程式的团队合作性和专业化程度大为提高。...
  • vipxiaotian
  • vipxiaotian
  • 2007年07月26日 20:23
  • 916

.net下分层架构系统的开发技术规范(1)

DotNet项目组编码规范Bill_Fang2004-3-15 要开发出专业化的软件产品,在编码阶段,必须严格贯彻一定的代码开发准则,这会减少程式的隐含错误,同时使程式的内部结构清晰。从而开发出少错误...
  • lornshrimp
  • lornshrimp
  • 2004年03月16日 14:34
  • 1384

.Net平台开发的技术规范与实践精华总结

.Net平台开发的技术规范与实践精华总结以下是本人对.Net平台开发实践的一些点滴总结。这里的技术规范主要是开发过程的代码规范、数据库设计规范、Com和.Net互操作规范;实践精华是对技术实践过程中的...
  • gongfs
  • gongfs
  • 2007年02月09日 12:50
  • 22222

浅谈项目系统架构分层

本文粗浅的讨论下关于项目系统架构的拆分模型,阐述每个层次(layer)的作用,以及面向SOA编程提供服务的方式。 服务端架构解决之道 大家看到这张图,用了一个形象的比喻来体现传统的服务端软...
  • u012662731
  • u012662731
  • 2016年12月15日 09:58
  • 1345

大型网站系统架构分析整理

千万级的注册用户,千万级的帖子,nTB级的附件,还有巨大的日访问量,大型网站采用什么系统架构保证性能和稳定性? 首先讨论一下大型网站需要注意和考虑的问题。 数据库海量数据处理:负载量不大的...
  • Charles0391
  • Charles0391
  • 2015年04月21日 22:38
  • 2852

.NET分层架构

我们刚开始学习架构的时候,首先会想到分层的概念,分层架构比较经典的是三层架构,那么,什么是三层架构呢?它包括表现层,业务层,数据访问层;而对于一个新手来说,从抽象意义上的三层架构,逻辑上就划分为三个层...
  • chz_cslg
  • chz_cslg
  • 2014年06月03日 15:55
  • 987

.net 分层架构

目前对于中小项目我一般分为三个层次,五个模块。在这里给大家说一下我的不成熟的分层思想,如果大家觉得我的分层有什么不合理的地方,欢迎提出。 三个层:DAL  - Data Access Layer   ...
  • zscmj
  • zscmj
  • 2011年07月19日 10:16
  • 402

GSM技术规范目录

原文地址::http://blog.csdn.net/xzl04/article/details/4147470
  • xqhrs232
  • xqhrs232
  • 2014年06月07日 22:49
  • 683

互联网分层架构之-DAO与服务化

互联网分层架构的本质,是数据的移动。   互联网分层架构演进的核心原则: 让上游更高效的获取与处理数据,复用 让下游能屏蔽数据的获取细节,封装   这些在上一篇《互联网分层...
  • z50L2O08e2u4afToR9A
  • z50L2O08e2u4afToR9A
  • 2017年10月13日 00:00
  • 387

用分层思想实现程序结构优化

1.前端jsp页面 首先我们新建好了一个前端jsp页面,页面中有一个表格,表格通过action的名字去寻找相对应的action。到这里信息就已经开始离开前端页面了。 2.web...
  • qq_30258957
  • qq_30258957
  • 2017年01月29日 13:21
  • 236
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:.net下分层架构系统的开发技术规范(2)
举报原因:
原因补充:

(最多只允许输入30个字)