ASP.NET:自訂實體類

來源:互聯網
上載者:User

ASP.NET:自訂實體類

什麼是自訂實體?

自訂實體是代表業務域的對象,因此,它們是業務層的基礎。如果您有一個使用者身分識別驗證功能(本文通篇都使用該樣本進行講解),您就可能具有 User 和 Role 對象。電子商務系統可能具有 Supplier 和 Merchandise 對象,而房地產公司則可能具有 House、Room 和 Address 對象。在您的代碼中,自訂實體只是一些類(實體和“類”之間具有非常密切的關係,就像在 OO 編程中使用的那樣)。一個典型的 User 類可能如下所示:

 

'Visual Basic .NET聲明User資訊表類Public Class UserE#Region "Fields and Properties"定義表中各種資訊    Private _UserID As String Private _PWD As String Private _Level As String Private _UserName As String     Private _Head As String    '對User表中欄位UserID的存取    Public Property UserID() As String        Get            Return _UserID         End Get        Set(value As String)            _UserID = value         End Set    End Property     '對user表中欄位密碼的存取    Public Property PWD() As String        Get            Return _PWD         End Get        Set(value As String)             _PWD = value         End Set    End Property     '對User表中欄位Level的存取    Public Property Level() As String        Get            Return _Level         End Get        Set(value As String)            _Level = value         End Set    End Property    '對user表中欄位UserName的存取     Public Property UserName() As String        Get            Return _UserName         End Get        Set(value As String)            _UserName = value         End Set    End Property      '對User表中欄位Head的存取    Public Property Head() As String        Get            Return _Head         End Get        Set(value As String)            _Level = value         End Set    End Property  End Class 

 

為什麼能夠從它們獲益?

使用自訂實體獲得的主要好處來自這樣一個簡單的事實,即它們是完全受您控制的對象。具體而言,它們允許您: 

• 利用繼承和封裝等 OO 技術。 

• 添加自訂行為。

例如,我們的 User 類可以通過為其添加 UpdatePassword 函數而受益(我們可能會使用外部/公用程式函數對資料集執行此類操作,但會影響可讀性/維護性)。另外,它們屬於強型別,這表示我們可以獲得 IntelliSense 支援:

圖 1:User 類的 IntelliSense( IntelliSense翻譯為智能感應功能 )
最後,因為自訂實體為強型別,所以不太需要進行容易出錯的強制轉換:

 

Dim UserId As Integer = User.UserId'與Dim UserId As Integer = ? Convert.ToInt32(ds.Tables("users").Rows(0)("UserId"))

 

對象關係映射

正如前文所討論的那樣,此方法的主要挑戰之一就是處理關係資料和對象之間的差異。因為我們的資料始終儲存在關聯式資料庫中,所以我們只能在這兩個世界之間架起一座橋樑。對於上文的 User 樣本,我們可能希望在資料庫中建立一個如下所示的使用者表:

圖 2:User 的資料檢視

從這個關係架構映射到自訂實體是一個非常簡單的事情:

 

 

'Visual Basic .NETPublic Function GetUser(ByVal userId As Integer) As UserDim connection As New SqlConnection(Connection_String)Dim command As New SqlCommand("GetUserById", Connection)command.Parameters.Add("@UserId", SqlDbType.Int).Value = UserIdDim dr As SqlDataReader = NothingTryConnection.Open()dr = command.ExecuteReader(CommandBehavior.SingleRow)If dr.Read ThenDim user As New UserUser.UserId = Convert.ToString (dr("UserId"))User.UserName = Convert.ToString(dr("UserName"))User.Password = Convert.ToString(dr("Password"))Return UserEnd IfReturn NothingFinallyIf Not dr is Nothing AndAlso Not dr.IsClosed Thendr.Close()End IfConnection.Dispose()command.Dispose()End TryEnd Function//C#public User GetUser(int userId) {SqlConnection connection = new SqlConnection(CONNECTION_STRING);SqlCommand command = new SqlCommand("GetUserById", connection);command.Parameters.Add("@UserId", SqlDbType.Int).Value = userId;SqlDataReader dr = null;try{connection.Open();dr = command.ExecuteReader(CommandBehavior.SingleRow);if (dr.Read()){User user = new User();user.UserId = Convert.ToInt32(dr["UserId"]);user.UserName = Convert.ToString(dr["UserName"]);user.Password = Convert.ToString(dr["Password"]);return user; }return null;}finally{if (dr != null && !dr.IsClosed){dr.Close();}connection.Dispose();command.Dispose();}}

 

我們仍然按照通常的方式設定串連和命令對象,但接著建立了 User 類的一個新執行個體並從 DataReader 中填充該執行個體。您仍然可以在此函數中使用 DataSet 並將其映射到您的自訂實體,但 DataSet 相對於 DataReader 的主要好處是前者提供了資料的中斷連線的視圖。在本例中,User 執行個體提供了中斷連線的視圖,使我們可以利用 DataReader 的速度

以上是我的簡單理解,如有出入,請勿見諒。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.