Chris said:
[ Much Snippage ]
[...] The "relationships" between the client-PC's and the
back-end is quite different in the two case. The
"architectural tradeoffs" have to be clearly understood
for each alternative.
I agree completely, and I see (building) architects making the
same sorts of decisions. As you say, that's really what the
architecture is about. The use you mention at top is just an
"outsiders" casual way of describing something.
I suppose I could argue that, the guy who (presumably after
considering all those important relationships) originally
designed the "Sun Solaris server running an Oracle back-end
accessed by Win2000 PC's over a 1 GB LAN, etc. etc." was
the Architect and the "outsiders" are just referring to his
(or her) work in a manner most people will grok.
My gripe is that this not the case very often. The
so-called "results" are usually presented with no
justification for the choices. In my mind, "why"
is more important than "what."
"We're using XYX *because* ... " is much more
illuminating than "We're using XYZ."
I agree! I only add that selection of those construction
materials *is* part of the analysis and design.
Absolutely! The selection of the construction
materials should be part of the analysis and
design, rather than the selection of construction
materials happening a priori. (With some hopefully
reasonable caveats.)
- If you're mostly a Java (or C or C++ or whatever)
shop, it is pointless (IMO) to choose some other language.
Similarly the choice of database system. (re)Training
your folks in the other language/DBMS will probably have
you miss your dates and lower the overall quality
because of OJT issues.
- On the other hand, if, e.g., you are used to operating
in a stateless client-server (pull) model
but upon analysis of the needs of the customer
you decide that either a stateful connection-based
model, an event driven (push) model, or even
a "batch processing" model (with 5 second batches)
is more appropriate, then this should influence
your choice of the 3PV (3rd party vendor) tools
you use for development.
(The construction materials, so to speak.)
While one can force-fit any of the abovementioned
models (or styles) to emulate any of the others,
one usually has to go through unnecessary gyrations
to do so. Note that within any of these models,
appropriate design principles as you mentioned
in a previous post, e.g. encapsulation, etc.,
must still apply.
The choice of model should also be a factor in the
lower-level designs, at least from a consistency standpoint.
The individual developers (assuming >>1 developer)
should be aware of these higher-level "architectural"
decisions in order to have the whole "system"
be perceived as a coherent whole by the customer.
That is, unless a real need for variation can be
demonstrated, then the higher-level architectural
principles should hold.
[Aside: while I have admitted that UI's are my
weak point when it comes to development, I *do* know
when a UI drives me up a wall. Consider a
UI where some options are presented in a drop-down
menu or menu hierarchy, while some others bring up
a dialog box with radio buttons or check boxes,
while still others bring up something else for you to
navigate through. Any or all of these may work, but
a little bit of consistency can go a long way toward
making the whole thing look like a unified
concept rather than a hodge-podge. That, too,
is "software architecture."]
Agreed. Much too often true. The examples
I've used only really applied to interactions
between components within a "system," e.g.
PC's talking to a back-end server. Now consider
what happens when this "system" has to interact
with other "systems" in order to do it's job.
(Kicking it up yet another notch.)
Should not the same principles apply?