★ 场景和问题

在Java开发时,需要来回交换大量的数据,比如要为方法传入参数,也要获取方法的返回值,该如何能更好的进行数据的交互?

★ 基本的编写步骤

◎第1步:写一个类,实现可序列化(如果以后数据是往数据库里存的,那么可以不序列化,节省资源)

◎第2步:私有化所有属性,保持一个默认构造方法(public无参)

◎第3步:为每个属性提供get()、set()方法(如果是boolean型变量,最好把get改成is)

◎第4步:推荐覆盖实现equals()、hashCode()和toString()方法

值对象的本质是“封装数据”

User 类:

package cn.hncu.pattern.factory.vo.v2.vo;

import java.io.Serializable;

public class User implements Serializable{
//只能将支持 java.io.Serializable 接口的对象写入流中,必须实现这个接口
private String userId;
private String tel;
private String address;
private int age;
private boolean isMale;
public User() {
} public User(String userId, String tel, String address, int age){
this.userId = userId;
this.tel = tel;
this.address = address;
this.age = age;
} public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public boolean isMale() {
return isMale;
}
public void setMale(boolean isMale) {
this.isMale = isMale;
} @Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((userId == null) ? 0 : userId.hashCode());
return result;
} @Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
User other = (User) obj;
if (userId == null) {
if (other.userId != null)
return false;
} else if (!userId.equals(other.userId))
return false;
return true;
} @Override
public String toString() {
return "User [userId=" + userId + ", tel=" + tel + ", address="
+ address + ", age=" + age + "]";
} }

B类:

package cn.hncu.pattern.factory.vo.v2;

import cn.hncu.pattern.factory.vo.v2.vo.User;

public class B {
String userId=null;
User user = null;
public boolean sendData(User user){ //Value Object ----Model
System.out.println("数据已经接受到。。。");
operate(user);
return true;
}
private void operate(User user) {
this.user = user;
this.user.setUserId("CN_"+user.getUserId());
System.out.println("处理数据...");
} public User getData(){
return user;
} public String getUserId(){
return userId;
} }

A类:

package cn.hncu.pattern.factory.vo.v2;

import cn.hncu.pattern.factory.vo.v2.vo.User;

public class A {
public static void main(String[] args) {
B obj = new B();
User user = new User("A001", "13512345678", "hncu",20); obj.sendData(user);
User data = obj.getData(); System.out.println( data.getUserId() );
System.out.println(data);
User user2 = new User();
user2.setAge(21);
user2.setUserId("A002");
System.out.println(user2);
obj.sendData(user2);
System.out.println(user2);
//可以做得更好的:
// Id可以用唱票模型 2318,2319,...... } }

输出:

数据已经接受到。。。
处理数据...
CN_A001
User [userId=CN_A001, tel=13512345678, address=hncu, age=20]
User [userId=A002, tel=null, address=null, age=21]
数据已经接受到。。。
处理数据...
User [userId=CN_A002, tel=null, address=null, age=21]

Java---设计模块(值对象)的更多相关文章

  1. DDD 领域驱动设计-Value Object(值对象)如何使用 EF 进行正确映射

    写在前面 首先,这篇博文是用博客园新发布的 MarkDown编辑器 编写的,这也是我第一次使用,语法也不是很熟悉,但我觉得应该会很爽,博文后面再记录下用过的感受,这边就不多说. 阅读目录: 上一篇回顾 ...

  2. 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑

    阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...

  3. DDD 领域驱动设计-“臆想”中的实体和值对象

    其他博文: DDD 领域驱动设计-三个问题思考实体和值对象 DDD 领域驱动设计-三个问题思考实体和值对象(续) 以下内容属于博主"臆想",如有不当,请别当真. 扯淡开始: 诺兰的 ...

  4. DDD 领域驱动设计-三个问题思考实体和值对象(续)

    上一篇:DDD 领域驱动设计-三个问题思考实体和值对象 说实话,整理现在这一篇博文的想法,在上一篇发布出来的时候就有了,但到现在才动起笔来,而且写之前又反复读了上一篇博文的内容及评论,然后去收集资料, ...

  5. DDD 领域驱动设计-三个问题思考实体和值对象

    消息场景:用户 A 发送一个消息给用户 B,用户 B 回复一个消息给用户 A... 现有设计:消息设计为实体并为聚合根,发件人.收件人设计为值对象. 三个问题: 实体最重要的特性是什么? Messag ...

  6. Value Object(值对象)如何使用 EF 进行正确映射

    DDD 领域驱动设计-Value Object(值对象)如何使用 EF 进行正确映射 写在前面 首先,这篇博文是用博客园新发布的 MarkDown编辑器 编写的,这也是我第一次使用,语法也不是很熟悉, ...

  7. Java 9 模块解耦的设计策略

    1. 概述 Java 平台模块系统 (Java Platform Module System,JPMS)提供了更强的封装.更可靠且更好的关注点分离. 但所有的这些方便的功能都需要付出代价.由于模块化的 ...

  8. 关于项目中值对象Identifier的设计-领域驱动

    到现在为止做了不项目,发现每个实体都会有个相应的值对象. 先简单说一下值对象和实体之间的区别: (以下内容来着<领域驱动设计>一书) 当一个小孩画画的时候,他注意的是画笔的颜色和笔尖的粗细 ...

  9. angularJS操作键值对象(类似java的hashmap)填坑小结

    前言: 我们知道java的hashmap中使用最多的是put(...),get(...)以及remove()方法,那么在angularJS中如何创造(使用)这样一个对象呢 思路分析: 我们知道在jav ...

随机推荐

  1. Java 异常处理的误区和经验总结--转载

    本文着重介绍了 Java 异常选择和使用中的一些误区,希望各位读者能够熟练掌握异常处理的一些注意点和原则,注意总结和归纳.只有处理好了异常,才能提升开发人员的基本素养,提高系统的健壮性,提升用户体验, ...

  2. js判断访问者是否来自移动端代码

    <script type="text/javascript"> function is_mobile() { var regex_match = /(nokia|iph ...

  3. Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)

    遇着这个提示的话,如果本地只安装了一个mysql,这里写的很详细的 http://www.blogjava.net/asenyifei/articles/82575.html 看这里可以解决,如果本地 ...

  4. 【转】关于Ubuntu的sources.list 的总结

    一.作用 文件/etc/apt/sources.list是一个普通可编辑的文本文件,保存了ubuntu软件更新的源服务器的地址.和sources.list功能一样的是/etc/apt/sources. ...

  5. LINQ Enumerable

    System.Linq.Enumerable类,提供了数十种称为扩展方法的共享方法,帮助您操作所有实现IEnumerable(of T)接口的类中的数据.由于Enumerable类的扩展方法可以处理许 ...

  6. JY05-JavsScript-JS基础01

    JavaScript第一天 1.前端三层 HTML   结构层 语义 骨架 css  表现层 审美 衣服 JavsScript 行为层 行为交互 动作 2.转义字符\r\n\t \r return 回 ...

  7. ajax请求在ie8下缓存问题

    我今天在改项目bug的时候,发现ajax请求在ie8下有缓存,在缓存过期之前,针对相同地址发起的多个Ajax请求,只有第一次会真正发送到服务端.在某些情况下,这种默认的缓存机制并不是我们希望的(比如获 ...

  8. Sqlserver数据库日志太大如何快速删除

    sqlserver使用在windows系统中,如果文件超上百GB了,我们还直接删除不了,这个问题我以前的apache日志就碰到过,至今还没删除呢,那么Sqlserver数据库日志太大如何快速删除呢,有 ...

  9. Eclipse自动生成文档注释

    /** *这种格式的注释就是文档注释 */ 快捷键是alt+shift+j,将光标放在类名,变量名,方法名上,按快捷键.

  10. HTML5 Canvas 中的颜色、样式和阴影的属性和方法

    颜色.样式和阴影的属性与方法 fillStyle                设置或返回用于填充绘画的颜色.渐变或模式 strokeStyle         设置或返回用于笔触的颜色.渐变或模式 ...