Hey Steve,

Long time no chat! Hope you're doing well?

OK, trivial example, I get firstName and lastName back and I want to display 
fullName. If I don't have an object where I can put a getFullName() method, I 
have to either iterate over the query in a service class to preprocess or 
duplicate the #firstName# #lastName# code in every view which is fine until I 
want to add middleInitial to everywhere I display the full name and then 
becomes a PiTA in terms of maintenance.

Of course, if all we ever did was to display a fullName, this would be 
overkill, but I find complexity usually grows. For example, I have a location 
object in a current app. You enter an address, but you can call location.lat 
and location.lng which return the lat and lng. Inside the location bean you 
have:

  def lat
    if(!...@lat)
      latlng = GeoKit::Geocoders::GoogleGeocoder.geocode("#{self.full_address}")
      self.lat = latlng.lat
      self.lng = latlng.lng
    end
    latlng.lat
  end

It's ruby code, but you get the idea. I'm populating the latlng from a Google 
geocoding lookup. The alternative approach of pre-processing your query to 
populate all of the lats and longs works, but the more calculated properties 
you have, the more complex and difficult to maintain those pre-processing 
routines become. 

Such preprocessing routines also violate (to me) the single responsibility 
principle. Sure, they are responsible for "preprocessing the query to generate 
calculated values", but that's a big responsibility that could include 
concatenating fields, pulling from third party web services and who knows what 
else to create the fully populated queries with all of the calculated 
properties.

I just default to objects with smart getters and seldom find myself regretting 
it. 

Also much easier to unit test the calculations.

Best Wishes,
Peter



On Jan 7, 2011, at 3:25 PM, Steve Bryant wrote:

> Peter,
> 
> Would you mind expanding on that a bit? How does the use of a query prevent 
> encapsulation? I realize that the data is read-only, but that doesn't mean 
> that the code that produced it wasn't well-encapsulated.
> 
> Or am I missing something fundamental?
> 
> Thanks,
> 
> Steve
> 
> On 1/7/2011 1:31 PM, Peter Bell wrote:
>> Well, I certainly wouldn't use a query object. I'm not a fan as there is no 
>> possibility of encapsulation of any possibly business logic.
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "CFCDev" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/cfcdev?hl=en.
> 

-- 
You received this message because you are subscribed to the Google Groups 
"CFCDev" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/cfcdev?hl=en.

Reply via email to