Each layer in the stack serves as an abstraction to the layer above it. Each layer on the stack must have a set of well defined interfaces that are on the same level of abstraction (that serves some specific purpose). Each layer is responsible for its own sanity check, and typically trusts each of the other layers to do the same unless the data is coming from an external source. Not every layer is used in every transaction. For example, a simple HTML interaction only goes down through the top several layers and then returns. Batch loading from a legacy system may skip several layers. However, if everyone develops their application along a layered architecture then they only have to worry about communication between the layers immediately above and below them. If their layer is sometimes skipped then they must provide a transparent module so the design rule that layers only interact with the layers immediately above and below them remains in effect with few exceptions. Specifying a sequence for top to bottom control flow prevents the problem of cyclic deadlock among objects. Implementation via purchased software packages (even crossing multiple layers) is permitted as long as “wrappers” are coded that can integrate the packaged within the overall architecture and as long as essential administrative control features are present for each layer (e.g. scalable configuration).
Breaking the application architecture into a many layered onion facilitates the adaptability of an application while adding to its complexity. Here is an example that calls out most of the possible layers, starting from the customer interface down to the persistent storage.
System Layers:
|
Operations
Management
|
Initialization,
Restart, Scalability, Monitor, Fail-over, Accountability
|
|
(Communicating
Objects)
|
The
below application layers go here
|
|
Component
Middleware
|
Messaging,
Load Balancing, Reusability, Interoperability
|
|
Directory /
Security
|
DNS,
LDAP, X.500
|
|
Operating
System,
Network Protocol |
System
Administration
|
|
Hardware,
Wire, Disks
|
|
Application Layers:
|
Customer
|
Customer
Applications
& Applets |
Browser,
Java applet, Legacy system
|
|
|
Communications
|
HTTP,
ftp, telnet, 3270, EDI, VPN, fax
|
|
|
Access
|
Security,
Certification, Firewall, Encryption, Session Closure, Connection Context
|
|
Presentation
|
Native
Presentation
|
Layout
XML to: HTML, Character, Record layout, EDI (via Templates+Rules), Validation
|
|
|
Generic
Presentation
|
Semantic
XML to Layout XML
|
|
Transaction
|
Workflow
Processing
|
Commerce
Events, State Table, Workflow, Job Initiation, Temporal & Priority
Control
|
|
|
Application
Context
|
|
|
|
Application
Logic
|
Custom
application-specific code goes here
|
|
Data
|
Business
Object
|
Metadata
markup, DB Data«Semantic XML,
|
|
|
Semantic
Navigation
|
Ontology,
Context, KQML, Semantic Undo
|
|
|
|
Data
Dictionary, Referential Integrity
|
|
|
Data
Distribution
|
Heterogeneous
navigation, Scale Redirection, Legacy Redirection
|
|
|
DB
Transaction
|
Stored
Procedures, ACID
|
|
|
Data View
|
SQL,
Dataset
|
|
|
Physical Data
Stores
|
Index/Cluster
Architecture, Bloom Filter, Encryption, RAID
|
No comments:
Post a Comment