使用工作单元。工作单元用于确定哪些实体/对象是“脏的”——这意味着它们的内存数据与持久性存储或数据库不同步——哪些是“干净的”。
只需调整概念以跟踪哪些属性是脏的,你就可以开始了。
例子
(我写Java已经有一段时间了,我这台机器上没有Java,所以可能会有一些错误)
MyClass.java
public class MyClass extends ChangeObservable {
private String name;
private Age int;
public MyClass(name, age) {
// when the object is first created,
// I'm assuming that the "clean" values are provided
this.name = name;
this.age = age;
}
public String getName() { return name; }
public void setName(n) {
name = n;
this.fireChangeEvent("name");
}
public String getAge() { return age; }
public void setAge(a) {
age = a;
this.fireChangeEvent("age");
}
}
UnitOfWork.java
public class UnitOfWork implements ChangeListener {
// dunno if this is the most efficient implementation...
private HashSet<String> dirties = new HashSet<String>();
private Observable obj;
public UnitOfWork(Observable obj) {
this.obj = obj;
obj.registerChangeListener(this);
}
public void registerDirty(propName) {
// probably more code needed...
dirties.add(propName);
}
public HashSet<String> getDirtyProperties() {
// probably more code needed...
return new HashSet<String>(dirties);
}
public void onChangeEvent(propName) {
this.registerDirty(propName);
}
// note: a UnitOfWork needs more functionality than this!
// I've implemented the bare minimum for the example
// but it would also need methods like `registerClean(...)`
}
Driver.java
public class MyDriver {
public static void main(String[] argv) {
MyClass myObj = new MyClass("Richard", 3);
UnitOfWork uow = new UnitOfWork(myObj);
myObj.setName("Mark");
for(String propName : uow.getDirtyProperties()) {
System.out.print(propName);
}
}
}
...现在UnitOfWork.getDirtyProperties(...)
可以用来确定哪些属性是干净的和肮脏的。