ColdFusion 9.0 Resources |
Structuring and reusing codeComponent inheritance and the Super keyword are two important tools for creating structured, object-oriented ColdFusion components.
Using component inheritanceComponent inheritance lets you import component methods and properties from one component to another component. Inherited components share any component methods or properties that they inherit from other components, and ColdFusion initializes instance data in the parent CFC when you instantiate the CFC that extends it. Component inheritance defines an is a relationship between components. For example, a component named president.cfc inherits its methods and properties from manager.cfc, which inherits its methods and properties from employee.cfc. In other words, president.cfc is a manager.cfc; manager.cfc is an employee.cfc; and president.cfc is an employee.cfc. In this example, employee.cfc is the base component; it’s the component upon which the others are based. The manager component extends the employee component; it has all the methods and properties of the employee component, and some additional ones. The president component extends the manager component. The president component is called a subcomponent or child component of the manager component, which, in turn, is a child component of the employee component.
When you browse the inherit.cfm file, the manager component refers to the basesalary defined in employee.cfc, which is the base component; the president component refers to both the basesalary defined in the employee component, and the mgrBonus defined in the manager component. The manager component is the parent class of the president component. Using the component.cfc fileAll CFCs automatically extend the ColdFusion WEB-INF/cftags/component.cfc component. (The WEB-INF directory is in the cf_root/wwwroot directory on ColdFusion configured with an embedded J2EE server. It is in the cf_root directory when you deploy ColdFusion on a J2EE server.) This CFC is distributed as a zero-length file. You can use it for any core methods or properties that you want all CFCs in your ColdFusion application server instance to inherit. Note: When you install a newer version of ColdFusion,
the installation procedure replaces the existing component.cfc file
with a new version. Therefore, before upgrading, save any code that
you have added to the component.cfc file, and then copy the code
into the new component.cfc file.
Using the Super keywordYou use the Super keyword only on CFCs that use the Extends attribute to extend another CFC. Unlike ColdFusion scopes, the Super keyword is not used for variables; it is only used for CFC methods, and it is not available on ColdFusion pages that invoke CFCs. The Super keyword lets you refer to versions of methods that are defined in the CFC that the current component extends. For example, the employee, manager, and president CFCs each contain a getPaid method. The manager CFC extends the employee CFC. Therefore, the manager CFC can use the original versions of the overridden getPaid method, as defined in the employee CFC, by prefixing the method name with Super.
In this example, each getPaid method in a child component invoked the getPaid method of its parent component. The child’s getPaid method then used the salary returned by the parent’s getPaid method to calculate the appropriate amount. Included pages can use the Super keyword. Note: The Super keyword supports only one level of
inheritance. If you use multiple levels of inheritance, you can
only use the Super keyword to access the current component’s immediate
parent. The example in this section illustrates handling this limitation
by invoking methods in a chain.
Using component packagesComponents stored in the same directory are members of a component package. Component packages help prevent naming conflicts, and facilitate easy component deployment; for example:
Invoke a packaged component method with the cfinvoke tag
The following example shows a CFScript invocation: <cfscript> helloCFC = createObject("component", "appResources.components.catQuery"); helloCFC.getSaleItems(); </cfscript> The following example shows a URL invocation: http://localhost/appResources/components/catQuery.cfc?method=getSalesItems Using CFCs in persistent scopesYou can place a CFC instance in the Session or Application scope. This way, the component properties continue to exist while the scope persists. For example, if you use a CFC for a shopping cart application, where the shopping cart contents must persist for the length of the user’s session. If you place the shopping cart CFC in the Session scope, you can use component properties to store the cart contents. For example, the following line creates an instance of the shoppingCart component in the Session scope: <cfobject name="Session.myShoppingCart" component="shoppingCart"> Code that manipulates persistent scope CFC properties must be locked, just as all other code that manipulates persistent scope properties must be locked. Therefore, lock both of the following types of application code:
If you place multiple CFC instances in a single persistent scope, you can create a named lock for each CFC instance. For more information on locking, see Using Persistent Data and Locking. Note: Session scope CFCs cannot be serialized, so
you cannot use them with clustered sessions; for example, if you
want to support session failover among servers.
|