I'm reviewing an desktop application that uses an architecture that
I'm not familiar with and hope someone has seen this type before. I'm
looking for someone to explain what is going on in each layer and what
is the reasoning for using this model. I'm using vb.net as my front-
end and stored procedures from Oracle as the back-end. My confusion is
the tiers (layers) of the front-end vb.net application with this
structure and I hope someone can explain the reason this logic model
was used:
1) Presentation Layer (all the user forms, no need to elaborate here,
except that no sql or data connections are defined in the code. This
is done in the server layer: DBinterface.vb)
_________________________________________________________________
2) Entity Layer (this is where I'm stumped by the logic - there are
two objects (what is each doing?):
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_
an object named Employee.vb contains this code:
<Serializable()> _
Public Class Employee : Implements IComparable
Private m_Key As Integer
Private m_FirstName As String
Private m_LastName As String
Private m_DOB As Date
Public Enum MaxLength
e_id = 10
firstname = 20
lastname = 20
End Enum
Public Property Key() As Integer
Get
Return m_Key
End Get
Set(ByVal Value As Integer)
m_Key = Value
End Set
End Property
Public Property FirstName() As String
Get
Return m_FirstName
End Get
Set(ByVal Value As String)
m_FirstName = Value
End Set
End Property
Public Property LastName() As String
Get
Return m_LastName
End Get
Set(ByVal Value As String)
m_LastName = Value
End Set
End Property
Public Property DOB() As Date
Get
Return m_DOB
End Get
Set(ByVal Value As Date)
m_DOB = Value
End Set
End Property
Public ReadOnly Property DOBString() As String
Get
If m_DOB <> Date.MinValue Then
Return m_DOB.ToShortDateString
Else
Return String.Empty
End If
End Get
End Property
Public Sub New()
m_Key = Integer.MinValue
m_FirstName = String.Empty
m_LastName = String.Empty
m_DOB = Date.MinValue
End Sub 'New
End Class
_________________________________________________________________
3) Server Layer (this is where I'm stumped by the logic - there are
two objects (what is each doing?):
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_
an object named EmployeeBroker.vb contains this code:
<Serializable()> _
Public Class Employees : Inherits CollectionBase
Default Public ReadOnly Property Item(ByVal index As Integer) As
Employee
Get
Return CType(List.Item(index), Employee)
End Get
End Property
Public Function CreateEmployee(ByVal emp As Employee, ByVal dept
As String, ByVal UserName As String, ByVal UserPassword As String,
ByVal DataSourceName As String) As Employee
Dim db As DBinterface
Dim rowsAffected As Integer
'validate input
If emp.SSN = String.Empty Then
Throw New
InformationalApplicationException(String.Format(Global.MsgDataMissing,
"Employee, Employee SSN."))
ElseIf emp.FirstName = String.Empty Then
Throw New
InformationalApplicationException(String.Format(Global.MsgDataMissing,
"Employee, Employee Fisrt Name."))
ElseIf emp.SSN.Length > Employee.MaxLength.ssn Then
Throw New
InformationalApplicationException(String.Format(Global.MsgTooLong,
"SSN", Employee.MaxLength.ssn.ToString("d")))
ElseIf emp.FirstName.Length > Employee.MaxLength.firstname
Then
Throw New
InformationalApplicationException(String.Format(Global.MsgTooLong,
"First Name", Employee.MaxLength.firstname.ToString("d")))
ElseIf emp.LastName.Length > Employee.MaxLength.lastname Then
Throw New
InformationalApplicationException(String.Format(Global.MsgTooLong,
"Last Name", Employee.MaxLength.lastname.ToString("d")))
'insert the data
Try
db = New DBinterface(UserName, UserPassword,
DataSourceName)
rowsAffected = db.InsertEmployee(emp)
Catch ex As OracleException
Select Case CType(ex.Code, Global.OracleError)
Case Global.OracleError.UniqueContraint
Throw New
WarningApplicationException(String.Format(Global.MsgInsertFailedNotUnique,
"Employee", "ID"), ex)
Case Global.OracleError.NullConstraint
Throw New
InformationalApplicationException(String.Format(Global.MsgInsertFailedReqFieldMissing,
"Employee"), ex)
Case Global.OracleError.ValueTooLargeForColumn
Throw New
InformationalApplicationException(String.Format(Global.MsgInsertFailedValueTooLong,
"Employee"), ex)
Case Else
Global.NotifyException(ex, "CreateEmployee")
Throw New
CriticalApplicationException(Global.MsgDatabaseError & ex.Message, ex)
End Select
Catch ex As Exception
Global.NotifyException(ex, "CreateEmployee")
Throw ex
End Try
'verify that insert really happened
If rowsAffected = 0 Then
Throw New
CriticalApplicationException(String.Format(Global.MsgInsertFailed,
"Employee"))
End If
'set return value
Return emp
End Function 'CreateEmployee
End Class
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_
an object named DBinterface.vb contains this code:
Imports System.Data.OracleClient
Imports System.Data.SqlClient
'database connection string (set in New())
Private m_Connect As String
Private m_SchemaName As String
Private Const sqlInsertEmployee As String =
"{0}.Employee.EmployeeAdd"
Public Sub New(ByVal UserName As String, ByVal UserPassword As
String, ByVal DataSourceName As String)
If DataSourceName = "TEST" Then
m_Connect = String.Format("User
ID={0};Password={1};Server={2}", UserName, UserPassword,
System.Configuration.ConfigurationSettings.AppSettings.Get("dbTestServer"))
m_SchemaName = "dbTestSchema"
ElseIf DataSourceName = "DEVELOPMENT" Then
m_Connect = String.Format("User
ID={0};Password={1};Server={2}", UserName, UserPassword,
System.Configuration.ConfigurationSettings.AppSettings.Get("dbDevServer"))
m_SchemaName = "dbDevSchema"
Else
m_Connect = String.Format("User
ID={0};Password={1};Server={2}", UserName, UserPassword,
System.Configuration.ConfigurationSettings.AppSettings.Get("dbServer"))
m_SchemaName = "dbSchema"
End If
End Sub 'New
Public Function InsertEmployee(ByVal emp As Employee) As Integer
Dim cn As OracleConnection = New OracleConnection(m_Connect)
cn.Open()
Try
Dim cm As OracleCommand = New
OracleCommand(String.Format(sqlInsertEmployee,
Configuration.ConfigurationSettings.AppSettings(m_SchemaName)), cn)
cm.CommandType = CommandType.StoredProcedure
cm.Parameters.Add("pE_ssn", OracleType.VarChar).Value =
ToOraValue(emp.SSN)
cm.Parameters.Add("pE_firstname",
OracleType.VarChar).Value = ToOraValue(emp.FirstName)
cm.Parameters.Add("pE_lastname", OracleType.VarChar).Value
= ToOraValue(emp.LastName)
cm.Parameters.Add("pE_dob", OracleType.DateTime).Value =
ToOraValue(emp.DOB)
Dim rowsAffected As Integer = cm.ExecuteNonQuery()
'get primary key and rows affected output parameter values
emp.Key = CType(cm.Parameters("pE_id").Value, Integer)
If rowsAffected < 0 Then rowsAffected =
CType(cm.Parameters("pRowsAffected").Value, Integer)
Return rowsAffected
Finally
cn.Close()
End Try
End Function 'InsertEmployee
End Class
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"DotNetDevelopment, VB.NET, C# .NET, ADO.NET, ASP.NET, XML, XML Web
Services,.NET Remoting" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://cm.megasolutions.net/forums/default.aspx
-~----------~----~----~----~------~----~------~--~---