Recordset: Create Iterating Domain Objects via Inheritance

Composition , Iterator , Inheritance , ColdFusion Add comments
Now bundled with its distant cousin, the composite Iterator, Recordset provides methods and properties for list traversal via inheritance. Recordset is not a query, but rather a query that is converted to an array of structs. Extending Recordset is useful as an alternative to maintaining an array of objects, or if you want to display a list with calculated fields (an employee has a startdate, but display format is "years of service").I chose Recordset as the name, because it provides similar methods to an ADO Recordset. Recordset has the following public methods: currentRow():numeric - the index of the current record.
next():boolean - the next record is set.
previous():boolean - the previous record is set.
reset():void - reset the index.
end():void - set the index to the last record
pageCount():numeric - if pagination is desired, returns the number of pages in the Recordset.
recordCount():numeric - total number of records.
loadQuery():void - accepts a ColdFusion query
setPage():void - set desired page for next iteration (used only with pagination).
How to use Recordset: If your transient objects do not extend another class, you can simply extend Recordset. <cfcomponent displayname="User" extends="com.fancybread.util.list.Recordset" output="false">
   <cfset variables.instance = StructNew() />
   ...
</cfcomponent>
To display a list of users by role, first instantiate the user list and set the user role and load the list in your controller. <cfset userList = variables.UserService.getUser() />
<cfset usersByRoleQuery = variables.UserService.getUsersByRole() />
<cfset userList.loadQuery(usersByRoleQuery) />
Loop through the list in your display view while next() returns true. <cfloop condition="userList.next()">
{display code}
</cfloop>
Many thanks go out to Aaron Roberson for recommending inheritable iteration among other excellent suggestions that are implemented with this release.

1 response to “Recordset: Create Iterating Domain Objects via Inheritance”

  1. Aaron Roberson Says:
    Great job Paul! The code is clean and though it may be less than 200 lines of code, it has soo much potential!

Leave a Reply



Powered by Mango Blog. Design and Icons by N.Design Studio