国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

.net下分層架構系統的開發技術規范(2)

2024-07-10 12:59:23
字體:
來源:轉載
供稿:網友
五. 項目的分層定義和編碼規范
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方法傳入一個或若干個需要用于查詢的參數,為字符串值,insert、update和delete方法不傳入任何參數;而對于返回值,所有的方法全部返回一個字符串。

例如:

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 )

七. 界面邏輯
界面邏輯如下圖所示:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 七台河市| 辉县市| 葵青区| 天津市| 怀集县| 镇雄县| 博客| 玉环县| 通州市| 毕节市| 陇南市| 乌审旗| 天镇县| 武清区| 沙洋县| 永州市| 汉源县| 柳河县| 普兰县| 临沭县| 酒泉市| 岳阳县| 承德市| 原阳县| 惠安县| 城口县| 田东县| 嘉黎县| 洛阳市| 屏南县| 云林县| 白水县| 沙洋县| 三江| 广饶县| 庄河市| 安溪县| 海盐县| 尉氏县| 孝义市| 淮安市|