• 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有直观的印象。示例代码下载

    阿不

  • 相关阅读:
    JavaScript知识回顾
    HTML和CSS相关知识回顾
    springmvc文件上传和下载
    jsp页面调试中的问题记录
    mybatis传参的几种方式
    ssm中调试遇到的坑
    idea新手日记
    Oracle安装
    mysql5安装
    Servlet 的原理----无脑笔记
  • 原文地址:https://www.cnblogs.com/hjf1223/p/NBear_Mappping_Introduction.html
Copyright © 2020-2023  润新知