Hey Paul, The JWeb+ Trial has a question about Value Objects. One of the correct answers is "It's a good idea that the Value Object be immutable" However, in Sun's discussion of the Value Objects they states "It is a design choice as to whether the ValueObject attributes are private and access through getters and setters or all the attributes are public" This doesn't sound like it immutable to me. Did I miss something?
You may want to search object ValueObject pattern on google. You'll find a lot of good articles explaining this. However, the basic idea is this: Value Objects are basically used to transport multiple values at one go between the client and the server. The point is that making such objects mutable gives the client a false sense of manipulating the data. Value Object is just a local object, when you call a setter on a ValueObject, it does not mean anything on the server side. It's just the local object that you are modifying. Value Objects are almost always read only and this should also reflect through it's implementation by making it immutable. HTH, Paul.
Agreed in that implementation it would make sense. If you read Sun's there is a part of the document where they discuss if you have a large number of Attributes to configure in an EJB Entity, you can use a ValueObject do the Setting there and in the EJB, simply expose a method such as setPara(ValueObject) My point is, it is not a design requirement of the ValueObject Pattern that the ValueObject be immutable. I agree you may have some design considerations where making it so would be beneficial but, there are others where it would not.
Of course, it is not a design requirement but it is a prefered way. Having getters and setters + private fields instead of no getters/setters + public fields is also not a design "requirement", but we almost always go for the former. Why? It is a cleaner and better "object oriented" way. ------------------ SCJP2, SCWCD Resources, Free Question A Day, Mock Exam Results and More! www.jdiscuss.com Get Certified, Guaranteed! JQPlus - For SCJP2 JWebPlus - For SCWCD JDevPlus - For SCJD
What sun is talking about is a different thing. Using something like setPara(ValueObject) does not mean that the value object has to be mutable. You can create a new valueobject and pass it in. ------------------ SCJP2, SCWCD Resources, Free Question A Day, Mock Exam Results and More! www.jdiscuss.com Get Certified, Guaranteed! JQPlus - For SCJP2 JWebPlus - For SCWCD JDevPlus - For SCJD
HI Carl, First of all Congrats on the exam success!!! Secondly, I've just been going through the pattern docs on Sun and in a little sectiobn at the beginning they state that the <b>patterns</b> are global abstract solutions that can be coded many ways and that <b>strategies</b> are coding solutions that have come up in many projects so they are providing info on them as useful structures and waiting to see if they can create a new pattern from those strategies at a later date. It's all in the semantics Bye,
------------------ Terry Doyle Sun Certified Programmer for Java 2 Platform