实体类隐式转换手记

说明:
有的时候因为项目解决方案结构需要,为了避免类库间
"闭环"引用,需要将一些第三方API统一放在一个特定的类库中进行调用,如果不用隐式转换类型的话,很难避免闭环引用,最常见的莫过于实体类的引用;

这次项目中是为了剥离在诸如BLLDAL层对API的引用:

TOP.API.DOMAIN中的实体类为例(以Area类为例)

1.首先创建一个跟Top.Api.Domain.Area结构相同的一个类TMALL_AreaInfo

using System;
namespace TMALL_Baishop.Model
{
        /// <summary>
        /// 天猫地址区域模型
        /// </summary>
        public class TMALL_AreaInfo
        {
                /// <summary>
                /// 标准行政区域代码.参考:http://www.stats.gov.cn/tjbz/xzqhdm/t20120105_402777427.htm
                /// </summary>
                public Int64 ID { get; set; }

                /// <summary>
                /// 区域类型.area区域 
                /// 1:country/国家;
                /// 2:province/省/自治区/直辖市;
                /// 3:city/地区(省下面的地级市);
                /// 4:district/县/市(县级市)/区;
                /// abroad:海外. 
                /// 比如北京市的area_type = 2,朝阳区是北京市的一个区,所以朝阳区的area_type = 4.
                /// </summary>
                public Int64 Type { get; set; }

                /// <summary>
                /// 地域名称.如北京市,杭州市,西湖区,每一个area_id 都代表了一个具体的地区.
                /// </summary>
                public String Name { get; set; }

                /// <summary>
                /// 父节点区域标识.如北京市的area_id是110100,朝阳区是北京市的一个区,所以朝阳区的parent_id就是北京市的area_id.
                /// </summary>
                public Int64 ParentID { get; set; }

                /// <summary>
                /// 具体一个地区的邮编
                /// </summary>
                public String Zip { get; set; }

                public static implicit operator TMALL_AreaInfo(Top.Api.Domain.Area value)    //这里用implicit可以,但个人觉得用explicit比较好
                {
                        if (value == null)
                                return null;
                        return new TMALL_AreaInfo   //如果在该实体类中还存在其他外键对象(数组),那么在这个外键对象中仍然要做隐式转换处理
                                              {                               //然后再在匿名初始化器中进行赋值
                                                      ID = value.Id,
                                                      Type = value.Type,
                                                      Name = value.Name,
                                                      ParentID = value.ParentId,
                                                      Zip = value.Zip
                                              };
	      }
     }
}  

2.Top.Api 中方法:

                /// <summary>                
                /// 查询地址区域
                /// 查询标准地址区域代码信息 参考:http://www.stats.gov.cn/tjbz/xzqhdm/t20100623_402652267.htm
                /// </summary>
                public static IList<TMALL_AreaInfo> AreasGet()
                {
                        ITopClient client = new DefaultTopClient(URL, APP_KEY, APP_SECRET);
                        AreasGetRequest req = new AreasGetRequest();
                        req.Fields = "id,type,name,parent_id,zip";
                        AreasGetResponse response = client.Execute(req, SESSION_KEY);
                        return response.Areas.Select(ent => (TMALL_AreaInfo)ent).ToList(); //这里若不进行强转,则response.Areas返回的是Top.Api.Domain.Areas
                }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值