| Pick Your Process |
| Stating the Obvious |
Okay, you, your team, company, is about to start a project. You've
identified your problem. Well, you think you have. Chances are, your problem
is about the "use of technology" and it is not really
a business problem. That is, it's more of a the technologists' problem
to get into new technologies. But that's not what this discussion is about;
I thought I'd just throw that in for good measure. But regardless of whatever
you're attempting solve, you probably started somewhere down in the tactical
layer. Particularly if it's about applying some new technology.
So that brings us to the thrust of this discussion, which is the reason
we do anything at all for that company that pays us at appropriate intervals.
It better be for the company's bottom-line and not for another line for
your resume.
|
| Back to Basics |
|
One of the benefits of being involved in the system development biz a
couple of decades is that I've had the benefit
|
| Forces |
| Different parts of an organization must analyze activity and opportunities.
For example, Marketing wants to see who has not purchased in a period of
time and who might be interested while Sales wants to know the demographics
of current sales. Information about a single Party can be stored once. Who
cares whether Acme Grommets is a Customer, a Vendor, or a Competitor? Why
keep redundant information in three separate databases? Worse yet, not even
knowing they are the same entity! |
| Solution |
| Do not keep a Customer or Member concept. Make Customer and Member an
instance of a 'Role'. Make role an attribute of an Account. The Account
object keeps a reference to the Party. In this way, the Party can have several
Accounts, each with a different (or even the same) role. |
 |
|
The above is an extreme simplification. However, the fundamental concept
is the Account. The Account is the primary tool for managing business.
It is the instrument that accrues historical information. It is the Account's
state (status) that a business cares about. For example, one part of the
business may define ANY party with an Account where the Role of the Account
is Customer. Another part of the same business may define a Customer as
any Party with an Account where the Role is Customer and the status is
Active.
Use Fowler's Accountability Pattern to provide further refinements, e.g.
restricting what a Role can do - Purchase. Also, Locations may be associated
with the Account rather than the Party. For example, one Account's Billing
Address may be X while another Account's Billing Address is Y.
|
| Related Patterns and Known Uses |
| As stated above, see Fowler's Accountability Pattern. This pattern has
been used widely in the author's practice for several clients. |
Copyright©2000 Marcus Software Designs, Inc.