System Information

Impossible Is Nothing...

导航

多层Web应用程序示例

这个应用程序包含三个对象:

1.OrderForm.aspx----代表用户界面层的asp.net页面。

2.BizObject-----代表业务层的组件。

3.DataObject-----代表数据层的组件。

首先,建立用户界面层。构成用户界面的asp.net页面如下代码。

OrderForm.aspx

<%@ Import Namespace="myComponents" %>

<Script Runat="Server">

Sub Button_Click(s as Object, e as EventArgs)

Dim myBizObject as new BizObject

If IsValid Then

Try

myBizObject.CheckOrder(txtCustomer.Text,dropProduct.SelectedItem.Text,txtUnitPrice.Text,txtQuantity.Text,dropState.SelectedItem.Text)

Catch expException As Exception

lblError.Text=expException.Message

End Try

End If

End Sub

</Script>

<html>

<head>

<title>OrderForm.aspx</title>

</head>

<body>

<form Runat="Server">

<h2>Enter an Order:</h2>

<asp:Label id="lblError" ForeColor="Red" Font-Bold="True" EnableViewState="False" Ruant="Server" />

<p>

Customer Name:<br>

<asp:TextBox ID="txtCustomer" Runat="Server" />

<asp:RequiredFieldValidator Text="必须输入一个顾客名!"

ControlToValidate="txtCustomer" Runat="Server" />

<p>

Product:<br>

<asp:ListBox ID="dropProduct" Runat="Server">

<asp:ListItem Text="Hair Dryer" />

<asp:ListItem Text="Shaving Cream" />

<asp:ListItem Text="Electric Comb" />

</asp:ListBox>

<asp:RequiredFieldValidator

ControlToValidate="dropProduct"

Text="你必须选择一件产品!"

Runat="Server" />

<p>

Unit Price:

<br>

<asp:TextBox ID="txtUnitPrice" Runat="Server" />

<asp:RequiredFieldValidator ControlToValidate="txtUnitPrice" Text="你必须输入一个产品的单价!"

Runat="Server" />

<p>

Quantity:

<br>

<asp:TextBox ID="txtQuantity" Runat="Server" />

<asp:RequiredFieldValidator ControlToValidate="txtQuantity" Text="你必须输入产品数量。"

Runat="Server" />

<asp:ComparValidator ControlToValidate="txtQuantity" Text="数量必须是数字!"

Operator="DataTypeCheck"

Type="Integer" Runat="Server" />

<p>

Customer State:

<br>

<asp:DropDownLIst

ID="dropState"

Runat="Server">

<asp:ListItemText="California" />

<asp:ListItem Text="Nevada" />

<asp:ListItem Text="Washington" />

</asp:DropDownList>

<p>

<asp:Button Text="Place Order" OnClick="Button_Click" Runat="Server" />

</form>

</body>

</html>

这个页面请求5项信息:顾客名,产品,产品的单价,数量和顾客所在的州。

当在表单中输入所有信息并且点击Place Order按钮时,执行Button_Click子例程。这个子例程创建BizOrder组件的实例并且将所有表单信息传递给组件的ChekcOrder()方法。

BiZObject.vb

Imports System

NameSpace myComponents

Public Class BizObject

Sub CheckOrder(Customer as String,Product as String,UnitPrice as Double,Quantity as Integer,State _ As String)

If Quantity<=0 Or Quantity>100 Then

Throw New ArgumentException("无效数字。")

End If

If State="Califonia" and Product="Hair Dryer" Then

Throw New ArgumentException("Californians 不能购买Hair Dryers!")

End If

If State="Washington" Then

UnitPrice+=UnitPrice * 0.6

End If

Dim myDataObject as New DataObject

myDataObject.SaveOrder(Customer,Product,UnitPrice,Quantity,State)

End Sub

End Class

End NameSpace

业务组件包含应用程序的所有业务规则。此组件封装了以下规则:

1。产品数量必须大于0并且小于100。

2。住在加利福尼来的人不能买吹风机。

3。住在华盛顿的人必须多付6%的销售锐。

如果订单不满足前二个要求之一,那么引发一个异常。错误在OrderEntry.aspx页面中被捕获并且被显示在一个Label控件中。

DataObject.vb

Imports System

Improts System.IO

NameSpace myComponents

Public Class DataObject

Sub SaveOrder(Customer as String,Product as String,UnitPrice as Double,Quantity as Integer,State _ As String)

Dim strPath as string="C:\Orders.txt"

Dim strmFile as StreamWriter

strmFile=File.AppendText(strPath)

strmFile.write("Customer:" &Customer & Environment.newline)

strmFile.write("Product:" & product & Environment.newLine)

strmFile.Write("Unit Price:" & UnitPrice.ToString() & Environment.NewLine)

strmFile.Write("Quantity:" & quantity.ToString() & Environment.NewLine)

strmFile.Write("State:" & state & Environment.NewLine)

strmFile.Write("==============="& Environment.NewLine)

strmFile.Close()

End Sub

End Class

End NameSpace

一定要编译BizObject和DataObject组件并且将它们复制到你的应用程序的/Bin目录下,才能使用这些组件。编译的次序很重要。因为BiZObject组件要引用DataObject组件,你必须首先创造DataObject组件。可以在Dos提示符下使用以下语句编译这个组件:

vbc /t: Library DataObject.vb

在将DataObject.dll复制到你的应用程序的/BIN目录之后,可以使用如下语句编译BizObject组件。

vbc /t:Library /r:DataObject.dll bizObject.vb

注意,在编译BizObject组件时使用了/r选项;它引用DataObject.dll组件。如果不包含此引用,会收到错误信息User-defined type not defined:DataObject. 

posted on 2005-06-11 16:56  SysInfo  阅读(1461)  评论(0编辑  收藏  举报