crossing chasms - nc state universityc) 1996, 1997 kyle brown & bruce whitenack 2 crossing...

89
(C) 1996, 1997 Kyle Brown & Bruce Whitenack 1 Crossing Chasms Objects Relational Databases

Upload: ngoduong

Post on 01-May-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 1

Crossing Chasms

Objects

Relational Databases

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 2

Crossing Chasms

• Crossing the Chasmfrom Objects toRelational Databases

• A Presentation in FourActs

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 3

Patterns

• Crossing Chasms is a pattern language

• A pattern has four parts– Context

– Problem

– Forces

– Solution

• We will show you how our patterns are applied toa real problem.

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 4

Act 1: Architectural Aims

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 5

Pattern: Choosing a Database

• Context: You areabout to embark upona new project.

• Problem: You mustchoose to use either arelational or an objectdatabase to provideobject persistence.

?

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 6

Choosing a Database (2)

• Forces– Cost of Technology

– Existence of legacy systems and software

– Cost of Training

– Fundamental structure of the application to be built

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 7

Choosing a Database (3)

• Solution– If you are heavily constrained by legacy code or data,

or have a significant investment in relationaltechnology, then choose an RDBMS for objectpersistence.

– On the other hand, if these do not apply, or if thestructure of your application demands it, an ODBMSwill be better.

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 8

Pattern: Four Layer Architecture

• Context: You musthave a coherentsoftware architecture.

• Problem: What is theappropriatearchitecture for an OOclient-server system?

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 9

Four Layer Architecture (2)

• Forces:– portability to new environments, libraries, and tool

vendors

– rational distribution of work among team members

– structure of existing tools and frameworks

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 10

Four Layer Architecture (3)

• Solution– Employ a layered architecture with:

• a View Layer

• an Application Model layer

• a Domain layer

• an Infrastructure layer

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 11

The Four Layers

View Layer

Application Model Layer

Domain Model Layer

Infrastructure Layer

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 12

Layers and Tiers

• In many cases the four layers can map onto “tiers”

• A two-tier system (fat client) places all four layerson a single client machine

• A three-tier system maps the domain andinfrastructure layer (and possibly part of the Appmodel layer) onto its own machine, leaving theview layer on the client machines

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 13

End of Act 1

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 14

Act 2: Database Schemes andDreams

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 15

Review of Relational Databases

9/22/64

record 1008 Jane Smith Sales 2/14/69 302

1009 Joe Diner Clerk 4/18/68 884

1010 Ed

1012

1014

1013

1011 Tom Masse

WinterDonald

John

Julie Vahnne

Mgr

Clerk

Clerk

Clerk

302

223

42

55

Smith

4/5/47

6/11/72

3/12/70

5/13/69

992Smithers Sales

field

Fir

st N

ame

Em

ploy

ee I

D

Last

Nam

eT

itle

Bir

th D

ate

Add

ress

ID

Employee table

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 16

Pattern: Table Design Time

• Problem:

– When is the best time to design your relational databaseschema during OO development?

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 17

Table Design Time Considerations

• Avoid data-centric design because it is usually moredifficult to maintain

• Performance is dependent on the design of thedatabase.

• Each OO design decision affects the database design.The models must be considered together.

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 18

Table Design Time Solution

• Design the database schema based on your object

model.

• For best results the database should be consideredduring the design of the object model, after an initialobject design iteration.

• Incorporate a relational - object database frameworksoon as possible into your architectural prototype

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 19

Pattern: Representing objects astables

• Problem: How do youmap a set of objects intoa relational databaseschema?RDBMS

Smalltalk

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 20

Relational to Object Considerations

Classes define objects Tables define records

Objects consist of attributes Records consist of fields

Records reference otherrecords using a foreign key

Objects reference otherobjects using a pointer

Fields in a table are statically typed Dynamic binding

Easy to represent complex

relationships

Inheritance

Hard to represent complex relationships

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 21

Relational to Object Considerations

• Rows in Tables have keys

• Objects can be inheterogeneous collections

• Objects do not have keys buthave object ids

• Data types do not match between arelational database and Smalltalk

• Every row in a tablehas the same attributes

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 22

Solution - Representing Objects inTables

1. Define a table for each persistent class2. Define columns whose values map directly to the

values in the class’ instance variables -- i.e. basedata types. (String, Number, Date)

3. If the class has object relationships, define columnswhose values are foreign key references to thetables that store the referenced objects.

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 23

Initial Table Design

•AD

DR

ESS_

ID

•M

AN

AG

ER

_ID

EMPLOYEE Table

Class Employee

VariableMappings

idfirstName

lastNamesex

manageraddress

•SE

X

•L_

NA

ME

•F_

NAM

E

•EM

P_ID

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 24

Pattern: Object Identity

Problem:• How do you preserve an object’s identity in a

relational database?• If two objects have the same set of attributes but are

really different objects how do you keep theiruniqueness in the relational database?

• How do you keep from creating multiple copies ofthe same object each time you read it in?

345674

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 25

Object Identity Considerations

• Each object’s uniqueness must be preserved in thedatabase

• There should be no unintended duplicates in theapplication as a result of reading in the same objecttwice.

firstName

anEmployee

‘John’

id 235

= =firstName

anEmployee

‘John’

id 235false

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 26

Solution: Create an ObjectIdentifier

• Ensure each class stores a unique identifier -- i.e.define an id instance variable to store unique id forEmployee

• Define the primary key field in the object’s table tostore the unique identifier.

• Sequence number generation can create unique idsfor each object…create a sequence table if necessary

• Use an identity map (cache) keyed on the identifierwhich points to the instance of the object in theimage. Prevents unwarranted duplicates during reads.

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 27

Being unique

Sequence Numbers maintain uniqueness among Employee objects

EMP_ID7

8

BIRTH_DATE9/11/70

F_NAME

9

L_NAME

Liz Taylor

Jeff Jones

Mary Peters 08/05/49

10/06/59

EMPLOYEE TABLE (partial)

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 28

Pattern: Foreign Key Reference

• Problem: How do you representobjects that reference other objectsthat are not “base data types”?

For example, an employee can have areference to an address object...– Note: A base data type refers to a

database data type like CHAR Thismaps to a standard class like String .

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 29

Solution: Foreign Key Reference

• Assign each object a unique object identifier(OID)

• Add a column for each instance variable that is nota base datatype or a collection.

• In that column store the OID of the referencedobject

• Declare the column as a foreign key

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 30

Foreign Key Column

•A

DD

RES

S_ID

•M

AN

AG

ER_I

D

EMPLOYEE Table

Class Employee

Class - TableMappings

idfirstNamelastName

sexmanageraddress

•SE

X

•L_

NA

ME

•F_

NAM

E

•EM

P_ID

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 31

The Keys to Consider

9 /2 2 /6 4

10 0 8 Ja ne S m ith S a le s 2 /1 4 /6 9 30 2

10 0 9 Jo e D in e r C le rk 4 /1 8 /6 8 88 4

10 1 0 E d

10 1 2

10 1 4

10 1 3

10 1 1 T o m M a ss e

W in te rD o n a ld

Jo hn

Ju l ie V a h n n e

M g r

C le rk

C le rk

C le rk

30 2

22 3

42

55

S m ith

4 /5 /4 7

6 /1 1 /7 2

3 /1 2 /7 0

5 /1 3 /6 9

99 2S a le sSm ith e rs

p r im a r yk e ys

fo re ig nk e ys

30 2

30 0

30 1

30 3

30 4

12 M o r r ise y D r iv e

R R # 2

P .O . B o x 10 0 7

11 B rea k w a te r S t re e t

11 M a in S t re e t

O t taw a O N

T o ro n to O N

O rl an d o F L

S o u r is P E I

K irb y N Y

E m p lo y e e T ab le

A dd r es s T a b le

Em

plo

yee

ID

Fir

s t N

am

e

La

s t N

am

e

Tit

l e

Bi r

th D

ate

Ad

dr e

ss

ID

Ad

dr e

ss

ID

Ad

dr e

ss

Cit

y

Pr o

v in

c e

(Target)

(Source)

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 32

Pattern: Representing objectrelationships

• Problem: How do you represent object relationshipsin a relational database?

• Context–An object model is built with a number basic relationships:

• 1 to 1

• 1 to many

• many to many

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 33

Representing object relationships -Considerations

• In the object domain, the object always references it parts,– …whereas in the relational domain, in cases such as 1 to

many relationship, each part references its owner• each employee has a key back to the manager (owner)

• In source object point of view, there is no many to manymapping, just 1 to many

• Example: each messnger has pick-ups (1 to many), anda pick-up may have more than 1 messenger (1 tomany) -- many to many.

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 34

Solution: Representing objectrelationships

• Determine the types of relationships between objects• Design table(s) corresponding to each domain object

using the following guidelines:• 1 to 1 relationship uses foreign keys in the source

table

• 1 to many relationship uses foreign keys from each ofthe many in the target table to the one ‘parent’ recordin the source table.

• many to many relationship use a relationship tablewith foreign keys that reference each of the relatedrecords in both tables

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 35

One-to-One Mappings

AddressEmployee7

325id

id1:1

address

ADDRESS Table

ADDRESS_ID

EMPLOYEE Table

EMP_ID ADDRESS_ID7 325

325

...

22 478

645

CITY STATE

Cary NC

Dover DE

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 36

One-to-Many Mapping

managedEmployees

Employee

Collection of

Employees

EMP_ID7

21

MANAGER_ID21

F_NAME

217

33

L_NAME

Susan Taylor

Jeff Bridges

Mary Jones

33

Susan

Taylor

Mary

Jones

21

Jeff

Bridges

EMPLOYEE Table

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 37

Many-to-Many Mappings

pick ups

Employee

Collection of

Package PickUps

332503

1717

Mary

Jones

Aug 21

CLINIC

Aug 20

Law firm

7 Collection of

Package PickUps

employees

PickUps

Jeff

Bridges

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 38

Many to Many with RelationshipTable

LOCATION

PICKUP Table

CLINIC

LAW FIRM

EMP_PICK Table

EMP_ID7

21

MANAGER_ID21

F_NAME

33

L_NAME

Susan Taylor

Jeff Bridges

Mary Jones 21

EMPLOYEE TablePICK_ID

2503

17177

7

33

2503

1717

2503

EMP_ID PICK_ID

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 39

Pattern: Representing SpecialCollections

• Problem: How do yourepresent special,(i.e.heterogeneous,ordered) collections in arelational database?

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 40

Representing Special Collections(2)

• Forces– 1NF rule

– Objects may be contained in many collections (M-Nrelationships)

– Collections can be heterogenous - members can be ofdifferent classes

– Collections can be ordered

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 41

Representing Special Collections(3)

• Solution– Create a relationship table for each collection. A

relationship table maps the primary keys of thecontaining objects to the primary keys of the containedobjects

– The relationship stores other information

• class of contained object

• ordering information

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 42

Heterogeneous Collection

contact numbers

Employee

Collection of

Contacts

217

33

Susan

Taylor

phonenumber

email address

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 43

Heterogeneous Collection

7

21

..

..F_NAME

33

L_NAME

Susan Taylor

Jeff Bridges

Mary Jones ..

EMP_ID

EMPLOYEE Table

EMP_ID

21

21

CONT_ID CON_TYPE

17 EMAIL

69 PHONE

217 PHONE

ID

17

29

USER DOMAIN

staylor

ID

21

69

AREA_CODE NUMBER

919 345-5678

212 567-7896

EMAIL

bwhiten

jewels.com

op.com

PHONE

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 44

Pattern: Representing Inheritance

• Problem: How do you representa set of classes in an inheritancehierarchy in a relationaldatabase?

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 45

Representing Inheritance

• Forces– Relational databases don’t provide support for inherited

attributes

– Object designs are rife with inheritance...

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 46

Representing Inheritance

• Solution– Create a table for each class in a hierarchy

– Add a column in the subclass tables for the (common)key

– Create concrete subclass instances by JOINing thetables

– If performance becomes an issue, create a table for eachsubclass that contains all the inherited attributes.

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 47

Inheritance

Employee

MessengerOfficeWorker

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 48

Inheritance

MESSENGER Table

EMPLOYEE Table

EMP_ID7

21

EMPLOY_TYPEMessenger

F_NAME

33

L_NAME

Susan Taylor

Jeff Bridges

Mary Jones Office

Messenger

EMP_ID7

21

BEEPER345-555

ROUTE

44

VEHICLE

Downtown B978

Uptown J234

Midtown R690 345-887

345-698

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 49

End of Act 2

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 50

Act 3: Brokering objects

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 51

Possible persistence architectures

• All-In-One

• Persistent Subclasses

• ?

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 52

All-in-one architecture

• One potential solution is to include database codedirectly in domain classes.

• This does not separate concerns and becomesunmaintainable.

• This is unfortunately what many vendorsunwittingly promote.

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 53

Persistent Subclasses

• Another solution is tomake persistent subclassesof domain classes.

• This results in anexplosion of subclasses.

BaseClass

DomainClassA DomainClassB

PersistentSubclassA

PersistentSubclassB

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 54

Pattern: Broker

• Problem: How do youseparate the domain-specific parts of anapplication from thedatabase-specific parts?

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 55

Broker (2)

• Forces:– Architecture should be simple, but powerful and

extensible

– Persistence should be orthogonal to class

– Must preserve encapsulation and separation of concerns

– Solution should avoid class explosion

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 56

Broker (3)

• Solution– Connect the database-specific classes and the domain-

specific classes with an intermediate layer of Brokerobjects.

– Brokers mediate between database objects and domainobjects and are ultimately responsible for reading fromand writing to the database.

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 57

Generic Broker architecture

• Brokers collaborate withboth domain objects anddatabase objects.

• This allows domainobjects to be ignorant ofdatabase issues.

DomainObject

saves to, restores with

DatabaseBroker

writes to, reads from

DatabaseSession

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 58

Object Passivation

• A broker is responsible for writing out(passivating) objects

• View the object as a directed graph.– Do a post-order traversal that writes out the leaves

before it writes out the intermediate nodes.

– Use the OID’s generated at the leaves to form foreign-key columns.

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 59

Object Activation

• A broker is also responsible for reading in objectsfrom tables– At a minimum, load in the basic attributes of an object

and its foreign-key OID’s.

– As performance needs dictate, instantiate subordinateobjects either immediately, or later using Proxies ordeferred instantiation.

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 60

Pattern: Mapping Metadata

• Problem– How do you define the mapping

between an object class and thecorresponding parts of a relationalschema?

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 61

Mapping tuples (2)

• Forces:– You want to avoid duplicated code

– You would like to handle common situations in thesame way

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 62

Mapping tuples (3)

• Solution:– Reify the mapping into a set of Map classes that (at the

least) map column names in a table to instance variableselectors.

– More complex maps can map common relationships (1-1, 1-N, M-N) between objects into relationalequivalents.

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 63

Maps example (Smalltalk)

SomeDomainObject>>maps

^ RowMap newadd: ( ColumnMap keyName: ‘user_id’

forAspect: #userId) ;add: (ColumnMap columnName: ‘full_name’

forAspect: #fullName);add: (ColumnMap foreignKey: ‘address_id’

forAspect: #address);add: ( DateColumnMap columnName: ‘renewal-date’

forAspect: #renewalDate);yourself).

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 64

Maps example (Java)

public RowMap toMapping() { RowMap newMapping = new RowMap(); newMapping.baseObject = this; newMapping.tableName = "CustomerTable"; newMapping.addStringOID("TelephoneNumber", telephone); newMapping.addMapForString("Name", name); newMapping.addMapForObject("Address", address); return newMapping; }

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 65

Pattern: Proxy

• Problem: How do you instantiate large, complexobjects without severe performance hits andmemory problems?

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 66

Proxy (2)

• Forces– Many objects are too big to instantiate in their entirety.

– Applications still need to navigate over part of anobject.

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 67

Proxy (3)

• Solution– Use a proxy object in place of a full component for

newly instantiated objects.

– The Proxy provides sufficient identificationinformation to instantiate itself when it receives amessage meant for the actual object.

– See [Gamma] for Smalltalk, C++ implementations

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 68

Proxy (Java example)

• Create interfaces that your domain object and itsproxy will implement

doThis() {if (realObject == null)realObject = getReal();return realObject.doThis();}DOProxy

DomainObjectInterface

doThis( )

DomainObject

doThis( )doThis( )

realObject

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 69

Pattern: Query Objects

• Problem:– How do you handle the generation and execution of SQL

statements in an OO way?

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 70

Query Objects (2)

• Forces:– Want to minimize the exposure of the system to SQL

– Want to maximize shared code

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 71

Query Objects (3)

• Solution:– Write a set of classes that generate SQL code from

other objects.

– Query objects collaborate with Map Objects to generateSQL.

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 72

Query object hierarchy

SQLStatement

SQLInsert SQLSelect SQLUpdateSQLDelete

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 73

SQL Statements (Smalltalk)

updateStatement := SQLUpdate new.updateStatement columnMaps: aDO maps;

tableName: aDO table;forObject: aDO.

updateStatement execute.

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 74

SQL Statements (Java)

SQLStatement statement;Hashtable allKeyValuePairs;allKeyValuePairs = map.baseTypesAndForeignKeys();statement = new SQLUpdateStatement();statement.generateSQLFrom(allKeyValuePairs,

map.oidUpdateClause(), map.tableName);

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 75

Pattern: Transaction objects

• Problem– How do you represent the

concept of a database transactionin an OO language?

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 76

Transactions (2)

• Forces– SQL depends upon transactions to maintain database

consistency

– OO languages do not (directly) support this concept.

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 77

Transactions (3)

• Solution– Build a Transaction class that represents a Logical

Units of Work

– Use exception handlers around a block of code thatexecutes SQL code that may fail.

– The exception handler will execute a ROLLBACK if anexception is raised, or a COMMIT if none occur.

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 78

Transactions (Smalltalk)

SQLTransaction>>doTransaction:

doTransaction: aBlock

"execute aBlock within the context of a transaction"

self class errorSignalhandle: [:ex |

self execute: ’ROLLBACK’]do: [ aBlock value.

self execute: ’COMMIT’].

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 79

Transactions (Java)

try {...try executing SQL Statements here…currentConnection.commit();

} catch (SQLException se) { try { currentConnection.rollback(); } catch (SQLException nse) { ...handle truly fatal errors here... } }

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 80

Object Relationships

RowMap

SQLStatement

ColumnMap

formulates

maps information with

retrieves information from

DomainObject

saves to, retrieves from

DatabaseBroker

writes to, reads from

DatabaseSession

is comprised of

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 81

End of Act 3

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 82

Act 4: Client-Server Concerns

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 83

Pattern: Cache Management

• Problem– How do you best manage the

lifetime of persistent objectsstored in an RDBMS and used onthe client?

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 84

Cache Management (2)

• Forces– Caches increase client performance, but increase client

memory size

– Caches can become out of date

– Caching increases application complexity

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 85

Cache Management (3)

• Solution– Use a Session object that has a bounded lifetime and is

responsible for identity cache management of a limitedset of objects.

– Balance speed vs. space by flushing the cache asappropriate

– Use a query before write (timestamp) technique to keepcache accurate

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 86

Pattern: Distribution of Behavior

• Problem– How do you distribute behavior

meaningfully between an OO clientand a Relational server?

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 87

Distribution of Behavior (2)

• Forces– RDBMS's will perform some functions (like sorting)

much faster than a Smalltalk client.

– Triggers in the RDBMS can provide behavior whenchanges occur

– When business rules are implemented in a database ithurts portability and reuse. It aslo requires additionalcode management

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 88

Solution: Distribution ofBehavior

• Take a minimalist approach of “guilty until proveninnocent”.

• Sorts, major queries (stored procedures), andaggregate functions are best done in the database.

• Triggers and other behavior are more worrisome.Be careful.

(C) 1996, 1997 Kyle Brown & Bruce Whitenack 89

Crossing Chasms

• To obtain a copy of the Crossing Chasms patternlanguage– try our web site host96.ksccary.com

– or, send email to either

[email protected]

[email protected]

– We have RTF, PDF and Postscript -- let us know whichyou prefer