NBear.Mapping使用教程(3):第一个简单例子
不斷有朋友希望能提供一些示例,同時我也發現,單純發一些文字性的教程。大家好像都沒有看明白NBear.Mapping是干嘛用的,所以從這篇開始我會陸續以實例的方式介紹NBear.Mapping的使用,以便給大家直觀的印象。這篇我們首先關注的是對象與對象間映射,在這篇文章里你將會看到。即使你的項目不需要與數據庫的映射,NBear.Mapping在日常開發中也會給你帶來非常大的幫助。
就如之前教程介紹的那樣,有一個IUser接口,這個接口定義了用戶的一些基本屬性:
1: public enum UserStatus 2: { 3: Normal, 4: Admin 5: } 6: public interface IUser 7: { 8: int? ID { get;set;} 9: string Name { get;set;} 10: string Address { get;set;} 11: int Age { get;set;} 12: UserStatus Status { get;set;} 13: }我們用一個類UserObject來實現它,這個類型除了實現IUser接口外,還有一個自定義的屬性Password:
1: public class UserObject : IUser 2: { 3: #region IUser Members 4: private string name; 5: public string Name 6: { 7: get 8: { 9: return name; 10: } 11: set 12: { 13: name = value; 14: } 15: } 16:? 17: private int? id; 18: public int? ID 19: { 20: get 21: { 22: return id; 23: } 24: set 25: { 26: id = value; 27: } 28: } 29: string address; 30: public string Address 31: { 32: get 33: { 34: return address; 35: } 36: set 37: { 38: address = value; 39: } 40: } 41: int age; 42: public int Age 43: { 44: get 45: { 46: return age; 47: } 48: set 49: { 50: age = value; 51: } 52: } 53:? 54: UserStatus status; 55: public UserStatus Status 56: { 57: get 58: { 59: return status; 60: } 61: set 62: { 63: status = value; 64: } 65: } 66:? 67: #endregion 68:? 69: private string password; 70:? 71: public string Password 72: { 73: get { return password; } 74: set { password = value; } 75: } 76:? 77: public UserObject() { } 78:? 79: public UserObject(int? id, string name, string address, int age, UserStatus status, string password) 80: { 81: this.id = id; 82: this.name = name; 83: this.address = address; 84: this.age = age; 85: this.status = status; 86: this.password = password; 87: } 88: }這時,我們希望將一個UserObject實例的屬性拷貝到另一個UserObject實例中,那么我們可能會使用如下的代碼:
1: UserObject user = new UserObject(1, "abu", "fuzhou", 24, UserStatus.Admin,"*&3345-+¥"); 2: UserObject userObject = new UserObject(); 3: userObject.Address = user.Address; 4: userObject.Age = user.Age; 5: userObject.ID = user.ID; 6: userObject.Name = user.Name; 7: userObject.Password = user.Password; 8: userObject.Status = user.Status;當然,如果單純的都是這樣的屬性拷貝的話,那完全可以通過實現ICloneable接口,來實現對象的淺拷貝。但是如果我們使用NBear.Mapping的話,那我們的代碼將會變成這樣:
1: UserObject user = new UserObject(1, "abu", "fuzhou", 24, UserStatus.Admin,"*&3345-+¥"); 2: UserObject outputObject = ObjectConvertor.ToObject<UserObject>(user);你會發現你的對象轉換代碼將會變的非常干凈簡單。此時,在保證系統安全的情況下,我并不希望Password字段參與拷貝工作,那么我們有幾下幾種做法:
1、修改代碼,使用ObjectConvertor.ToObject<InputType,OutputType>(user)的形式,如下:
1: UserObject outputObject = ObjectConvertor.ToObject<IUser,UserObject>(user);這時,參與對象拷貝的就只有IUser接口里所定義的屬性字段了。
2、不改變原有代碼,在配置文件中增加這樣的一段配置,就可以讓過濾掉Password的拷貝:
1: <object inputType="UserObject" outputType="UserObject"> 2: <views> 3: <view name="Default"> 4: <ignoreProperties> 5: <add destName="Password"></add> 6: </ignoreProperties> 7: </view> 8: </views> 9: </object> 10: <mappings>以上是兩種最簡單的做法,通過NBear.Mapping,還有其它的調用方法來達到這個目的。
這篇博客比較短,目的是希望能讓大家對NBear.Mapping有直觀的印象。示例代碼下載
阿不
轉載于:https://www.cnblogs.com/hjf1223/archive/2007/12/17/NBear_Mappping_Introduction.html
總結
以上是生活随笔為你收集整理的NBear.Mapping使用教程(3):第一个简单例子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个好的软件开发人员的标准
- 下一篇: C#3.0 为我们带来什么(2) ——