1.总是用属性 (Property) 来代替可访问的数据成员(field)

 

好的OO编程习惯是提供公开的访问器,让客户代码有效的操作选择的私有Attribute的同时,也可以使对象本身能很好的控制这些Attribute,保护业务逻辑的正常运作有2种实现访问器的方法:

1.OO编程语言的普通手法提供get和set的方法分别用来提取和修改Attribute.

编写一个最简单的类Author来实现我们的访问器

 

程序代码
 
  1. class Author  
  2. {  
  3.     string firstName;  
  4.     string lastName;    
  5.     public string GetAuthorName ()  
  6.     {  
  7.         return firstName + " " + lastName;  
  8.     }  
  9. }  


2.C#首选的Property构造方法在类中预定义的一个property会提供取值和赋值访问器.
下面为property版的Author访问器

 程序代码
  1. class Author  
  2. {  
  3.     string firstName;  
  4.     string lastName;     
  5.     public string AuthorName  
  6.     {  
  7.         get { return firstName + " " + lastName; }  
  8.     }  
  9. }  


在Sample中我只是简单定义了一下所谓的取值器,目的则是通过呈示2种不同的实现手法来解释Property这种语言构造的基本特征(也是最显著的):
一个property的名称应与其关联attribute的名称相符,但应以大写字母开头(Pascal命名法)
一个property的类型必须与其关联的attribute类型一致
一个property定义取值和赋值访问器,但是它们的声明和客户代码调用方式都不一样。
不必为取值访问器声明返回类型,不必为赋值访问器声明参数列表,它会自动取得名为value的单个参数,代表了客户代码提供的新值实现property进步在:整体的声明了property的类型,而访问器自动从property继承该类型整体的声明了property的访问性,访问器自动从property继承该性质对于公共的Attribute,除了直接赋值之外不会有其他的代码执行,而对于property访问器,我们编写的所有代码都将执行。在某种程度上,property提供了从客户代码访问公共Attribute的方便性:某个Attribute目前很简单,但是我们无法保证以 后它不会扩展得很复杂,在扩展中我们可以通过改变property的内部逻辑来达到我们的目的而不是直接对Attribute进行操作,这带来的便捷是可 以想象的另外,property提供了使用私有Attribute和取值/赋值控制数据的完整性。客户代码对property的操作最终作用于对象的 Attribute,例如为了防范不符合业务逻辑的客户代码的输入,我们就必须拒绝它的传入。为了达到拒绝的目的,我们大可不必另外编写验证的代码,而是 把过程放置在set赋值访问器内部举一个简单的例子来说明当类的私有特征改变时如何限制连锁反应.

旧版本程序代码:

  1. public class Person  
  2. {  
  3.     int age;  
  4.     public int Age  
  5.     {  
  6.         get { return age;}  
  7.     }  
  8. }  


新版本程序代码:


  1. public class Person  
  2. {  
  3.     int age;  
  4.     public int Age  
  5.     {  
  6.         get { return systemDate - birthDate ;}  
  7.     }  
  8. }  


这样当外部条件发生变化时,我们就轻松的躲过了修改代码的必要。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于BeanUtils.copyProperty()方法的代替方法,可以使用Java 8中引入的PropertyUtils类来实现类似的功能。PropertyUtils类提供了一些方法来操作JavaBean的属性。 要使用PropertyUtils类,您需要在项目中引入Apache Commons BeanUtils库。 下面是一个示例代码,演示如何使用PropertyUtils类来复制JavaBean的属性: ```java import org.apache.commons.beanutils.PropertyUtils; public class Main { public static void main(String[] args) { SourceBean source = new SourceBean(); source.setName("John"); source.setAge(30); // 创建目标对象 TargetBean target = new TargetBean(); try { // 复制属性 PropertyUtils.copyProperties(target, source); System.out.println("Name: " + target.getName()); System.out.println("Age: " + target.getAge()); } catch (Exception e) { e.printStackTrace(); } } } class SourceBean { private String name; private int age; // 省略 getter 和 setter 方法 } class TargetBean { private String name; private int age; // 省略 getter 和 setter 方法 } ``` 在上面的示例中,我们创建了一个SourceBean对象,它有一个name属性和一个age属性。然后我们创建了一个TargetBean对象,通过使用PropertyUtils.copyProperties()方法,将source对象的属性复制到target对象中。最后,我们打印target对象的属性值。 请注意,要在您的项目中使用Apache Commons BeanUtils库,您需要将其添加到您的构建工具(如Maven或Gradle)的依赖项中。 除了PropertyUtils类,还有其他一些方法可以用于复制JavaBean属性,如Spring框架中的BeanUtils类、Apache Commons Lang库中的ReflectionToStringBuilder类等。您可以根据项目的需求选择合适的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值