zoukankan      html  css  js  c++  java
  • 代码重构~封装成员变量

    返回目录

    封装成员变量(Encapsulate Field) — 将仅限于本类使用的变量重写成私有(private)成员变量,并提供访问方法(accessor method)。这种重构方式可以将与外部调用者无关的变量隐藏起来,减少代码的耦合性,并减少意外出错的概率。

    看图所示:

     1     /// <summary>
     2     /// 验证实体类
     3     /// </summary>
     4     public class RuleViolation
     5     {
     6         /// <summary>
     7         /// 验证指向的错误信息
     8         /// </summary>
     9         public string ErrorMessage { get; private set; }
    10         /// <summary>
    11         /// 验证指向的属性名
    12         /// </summary>
    13         public string PropertyName { get; private set; }
    14 
    15         public RuleViolation(string errorMessage)
    16         {
    17             ErrorMessage = errorMessage;
    18         }
    19 
    20         public RuleViolation(string errorMessage, string propertyName)
    21         {
    22             ErrorMessage = errorMessage;
    23             PropertyName = propertyName;
    24         }
    25     }

    以上的代码是一种特殊的封装成员变量的方式,它使用了.net3.5的get;set;特性,不需要重新定义额外的变量,显得程序代码更简洁,层次更清晰。

    下面代码是一种典型的封装成员变量的方式

    不规范的代码:

        public abstract class Singleton<TEntity> where TEntity : class
         {
           public TEntity Instance=...;
     }

    使用封装成员变量进行代码重构之后:

        public abstract class Singleton<TEntity> where TEntity : class
         {
            private Lazy<TEntity> _instance=...;
    
             public TEntity Instance
             {
                 get { return _instance.Value; }
             }
    
    }

    其中代码中的_instance对外是“隐藏”的,而外界可以通过Instance这个只读的属性去访问这个_instance的值。

    返回目录

  • 相关阅读:
    UEditor使用报错Cannot set property 'innerHTML' of undefined
    freemarker如何在url中传递中文参数
    freemarker字符串转换成日期和时间
    freemarker 类型转换
    内存分析工具 MAT 的使用
    Ubuntu13.04下Eclipse中文乱码解决
    自定义上下文对话框
    格局中@null的代码实现方式
    Android xml资源文件中@、@android:type、@*、?、@+含义和区别
    探讨:你真的会用Android的Dialog吗?
  • 原文地址:https://www.cnblogs.com/lori/p/2609319.html
Copyright © 2011-2022 走看看