![]() |
||||||||||||||||||||||
The Black Art of Programming |
Concepts of ArchitectureAs I think I've mentioned before, I work in real-time telephone billing data generation. (And as someone who appreciates what is left of the English language, that sentence reminds me once again that there is no word which cannot be adjectived.) Some folks want to be billed for local calls. OK-fine. Some folks don't. OK-fine. But then the OK-fine folks at the phone company put in this extended local calling area, so even folks that don't pay by the call get billed by the call for these not-so-local calls. OK-fine. What's a local call, then? No answer. Whatever. We know we're billing for a (not-so-)local call, never mind how. Sometimes it matters how long you talk. Sometimes it matters who you call. Sometimes there is a billing index that determines the billing plan (i.e., the actual billing rates). Most of the time, the decision about which of these is important does depend on who you call, even if the actual billing rate doesn't depend on who you call. This is the easy part to understand. Of course the telephone switch operators (they're called "craftpersons") have a way to enter this data into the switch. So there's a place to store all this, and there are interfaces to put the data there, as well as to get it out again. I know this to be true. I also know the following to be true: I can't find anyone who will claim responsibility for either the data or the interfaces. I can't go look at the data directly. I can't use the interfaces to the data. What I can do is write my own interface to use these data interfaces, but then I can't use my own interfaces. Instead, I have to give these interfaces over to yet another group, and ask them can they please, pretty-please, pretty-please with sugar on it give me their own set of interfaces that will let me have access to the data that comes from the interfaces that I wrote but can't use. And when those nice people finally get around to delivering those interfaces, I have to turn them over to someone else and say, please add these to your interface so that when I'm actually ready to bill, I can have one place to go for all the information I need. It's not quite that simple, however. Remember that bit about how important it may or may not be to know who you called? When you call someone, the number you dial gets translated. Usually it gets translated to the same thing you dialed, but there's no guarantee. And only the people who know how to translate are allowed to do translation. So before I can use my one-stop-shopping billing data interface to request access to the interface to my interface to the interface to my other billing data, I have to use the same one-stop-shopping to find out who you called, and make that number available to my interfaces to the billing data interfaces, so that someone, somewhere along this food-chain can pause to ask for a translation, each and every time I ask for a record out of the data base, so I can ask the simple question, "Is this who you called?" (Yes, of course I know who you called, but I can't apply that knowledge.) If by any chance I get a positive answer, then I can continue diving to the next layer of the data base to get the real answer about what data I need to use in order to bill your call. How do I pass the number you called into the interfaces that I wrote but that I'm not allowed to use? No answer. This is called "architecture." The architecture has a name; it's called, "Fucking Renaissance Modern." Frank Lloyd Wright with Doric columns and non-functioning gargoyles at random intervals around the roof. I have a gargoyle sitting on my monitor, poised to leap into my face. Somehow that's not so funny any more. |
|||||||||||||||||||||
|
NACK NACK Who's there? ATM ATM who? NACK NACK |
||||||||||||||||||||||
|
Copyright © 1995, 2001 by Diane Wilson. All rights reserved. |
|||||||||||||||||||||