Hi Brock,

The code you posted is a typical n-tier architecture here it is 3-tier
architecture code.

Firstly I would suggest you to understand meaning of 3 tier
architecture, types of layers and what functonality comes into each
layer. Use Google for the same.

Purpose to use this architecture is separaton of functionality into
different layers. You can get lot of articles on which will explain
this in detail.

Answers to your code Queries -
1. You said Emplyee.vb is a object no it's not a object but a class
which contains properties or placeholders which hold the data that
will be passed front end.
Understand the concept "Properties".

2. The class Employees contains business logic validations which will
be part of business layer as per 3-tier architecture. This class in
turn calls the data access layer methods. In this case DBInterface.cs

3. DBInterface.cs is a data access layer class which is responible for
executing queries and returning results to the business layer.

I hope this clears your doubts.

Regards
Hrishikesh



On 9/24/08, Brock <[EMAIL PROTECTED]> wrote:
>
> 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