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
-~----------~----~----~----~------~----~------~--~---

Reply via email to