这个应用程序包含三个对象:
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.