Let's say I have the following class, with many instance variables and corresponding getters and setters:
public class Foo {
private String a;
private int b;
...
private List<String> z;
public String getA() { return a; }
public void setA(String a) { this.a = a; }
public int getB() { return b; }
public void setB(int b) { this.b = b; }
...
}
There is another class that populates the values, and it's resource intensive:
public class MyService {
public Foo retrieveFoo() {
// call some resource intensive code to retrieve the values
String a = getTheString();
int b = getTheInt();
List<String> z = getTheList();
Foo f = new Foo();
f.setA(a);
f.setB(b);
...
f.setZ(z);
return f;
}
}
I have multiple clients that want to use instances of the above class, but some are only interested in getting a small subset of the variable values and not everything:
public class ClientA {
private MyService service;
public void doSomething() {
Foo f = service.retrieveFoo();
String a = f.getA();
int b = f.getB();
// not interested in anything else
}
}
public class ClientB {
private MyService service;
public void doSomething() {
Foo f = service.retrieveFoo();
List<String> z = f.getZ();
// not interested in anything else
}
}
One thing I could do is have the client tell the MyService to only retrieve which values it's interested in. Something like this:
public class ClientA {
private MyService service;
public void doSomething() {
// the Service would only retrieve a and b, which
// means all other variables would be set to Null
Foo f = service.retrieveFoo(Arrays.asList("a","b"));
String a = f.getA();
int b = f.getB();
// not interested in anything else
}
}
However, this just seems wrong since the other values would be null. Is there a better way to design this?
Aucun commentaire:
Enregistrer un commentaire