Title of Presentation Name of Author Function Date

Download Report

Transcript Title of Presentation Name of Author Function Date

Natural Engineer – Refactoring:
From Monolithic Applications to
Service-Oriented Application
Tom Philpott
GSL
[email protected]
Natural Engineer – Next version
Extract is around 60 times quicker
Load is around 40% quicker
New GUI based on an object list rather
than the function driven method of the
current NEE.
Application design through the ages
Structured Design
Object Oriented Programming
Service Oriented Architecture
Refactoring
Structured Design
Coupling
Cohesion
Design Heuristics
What influences Coupling?
Types of connection
Data
Control
Minimally connected
Normally connected
Pathological
What influences Coupling?
Complexity of the interface
Basically, the number of arguments passed.
Information flow
Binding time
Coupling
Common Environment coupling
Decoupling
Convert implicit references to explicit ones.
Localize common environments
Standardize connection
Various takes on coupling
Yourdon &
Constantine
Martin & McClure
McConnell
Budgen
Data coupling or
input-output
coupling
Data coupling
Simple-data
coupling
Data coupling
Not mentioned
Stamp coupling
Data-structure
coupling
Stamp coupling
Control coupling – Control coupling
activating
Control coupling
Control coupling –
activating
Control coupling – Control coupling
coordinating
Control coupling
Control coupling –
coordinating
Common
environment
coupling
Common coupling Global-data
coupling
Common
environment
coupling
Not mentioned
Content coupling
Not mentioned
Content coupling
Cohesion
Yourdon & Constantine
Example
Functional
Every element of the code is
necessary for process
Sequential
Code in which the output of one
process is input for the next process.
Communicational
Code in which each line deals with the
transformation of the input or output
data.
Procedural
Code that is placed in a loop or after
some sort of decision.
Temporal
An initialization routine.
Logical
A generalized input or error routine.
Coincidental
Code that just is thrown together just
because it is there.
Various takes on cohesion
Yourdon &
Constantine
Martin & McClure
McConnell
Budgen
Functional
Functional
Functional
Functional
Sequential
Sequential
Sequential
Sequential
Communicational
Communicational
Communicational
Communicational
Procedural
Procedural
Temporal
Procedural
Temporal
Temporal
Procedural
Temporal
Logical
Logical
Logical
Logical
Coincidental
Coincidental
Coincidental
Coincidental
Design Heuristics
A module shouldn’t be any bigger than
100 statements.
The span of control shouldn’t exceed 7
plus/minus 2.
A high span of control can meant the module
was broken down too much.
When you identify reuse possibilities the
process is called fan-in.
Object Oriented Programming
Object
Class
Abstraction
Encapsulation
Inheritance
Polymorphism
Object Oriented Design
Object structure modeling
Model business processes
Derive classes from these business processes
A business process is a set of activities for
transforming some kind of input into a product
that a customer is willing to pay for.
Coad/Yourdon guidelines
 Focus on clarity of design
 If you cannot understand what someone is doing, you will not
use the object.
 Keep message protocols simple
 Coupling is discussed here as well. If a message requires more
than three parameters, it is badly designed.
 Keep operations simple
 Code should be less than one “page”.
 Minimize design volatility
 A bad design requiring frequent changes can be spotted through
a configuration management system.
 Minimize overall system size – big is bad.
 A medium size system should not require more than a few dozen
class hierarchies.
Service Oriented Architecture
Utilizes loosely coupled software services
to support business process requirements
Resources are available and accessible
without any need to know the underlying
platform
Not necessarily tied to a technology, could
be RPC, DCOM, .Net, ORB or WSDL.
Architecture for creation of composite
applications from loosely coupled services.
SOA
Refactoring
Refactoring
Refactoring Topics
What is Refactoring?
Small Scale Refactoring
The Full Scale Refactoring Methodology
Phase I: Preparation
Phase II: DB I/O Separation
Phase III: Presentation Layer Separation
Alternative thinking to Refactoring…
Analyze Data Model
Build Components per conceptual Entity
What is Refactoring?
What is Refactoring ?
Refactoring is a technique for
restructuring or modifying existing
source code without changing it’s
external behavior.
It can
Improve the design of the application
Systematically change program structures
Improve readability of code
Support agile program development
It does not
Change the program functionality
Natural Engineer: Refactoring
Aim of Refactoring
Presentation dialog
with I/O and some
navigation logic
Program with
Presentation Logic
Business Logic
Database I/O
Refactoring
Business Logic
Database I/O
Natural Engineer: Refactoring
Accessing Refactoring
Natural Engineer: Refactoring
The three phases of Refactoring
Natural Engineer - Refactoring
Phase I – Preparation
Processes required in order to prepare the code
for further refactoring
Phase II – DB Split
The ability to create subprograms that perform
the DB access
Phase III – Presentation Split
The ability to create subprograms that contain
the business logic
Natural Engineer: Refactoring
Natural Engineer Refactoring
Phase I: Preparation
Natural Engineer: Refactoring
Phase 1: Preparation
Natural Engineer: Refactoring
Phase 1: Preparation
Natural Engineer: Refactoring
Phase 1: Preparation
Natural Engineer: Refactoring
Phase 1: Separate Processing Rules
Existing Code
Natural Engineer: Refactoring
Phase 1: Separate Processing Rules
Natural Engineer: Refactoring
Phase 1: Separate Processing Rules
Natural Engineer: Refactoring
Phase I: Conversational DB Loops
Natural Engineer: Refactoring
Phase 1: Conversational DB Loops
Natural Engineer: Refactoring
Phase I: Similar Code Identification
Natural Engineer: Refactoring
Phase I: Similar Code Identification
Natural Engineer: Refactoring
Natural Engineer Refactoring
Phase II: Database I/O
Separation
Natural Engineer: Refactoring
Phase II – DB Split
Creates a subprogram per DDM/Key combination
Creates one subprogram per DDM for single ISN
actions (DELETE, STORE, UPDATE, GET)
Creates one subprogram per application for BT
and ET logic
Then replaces ADABAS logic in original program
to CALLNAT to newly created subprograms.
Remember: USR4011N from SYSEXT to
SYSTEM. This is the module that creates the
hashing number for optimistic locking.
Natural Engineer: Refactoring
Phase 2: Data I/O Separation
Natural Engineer: Refactoring
Phase II – DB split – Original Code READWH
Natural Engineer: Refactoring
Phase II: DB Split
Examples of the PDAs created – Record and Key
Natural Engineer: Refactoring
Phase II: DB Split
Subprogram accessing ADABAS – Decide Block
Natural Engineer: Refactoring
Phase II – DB Split
Subroutine handling one particular access
Natural Engineer: Refactoring
Phase II: DB Split
Replacement of ADABAS access in program
Natural Engineer: Refactoring
Natural Engineer Refactoring
Phase III: Presentation Layer
Separation
Natural Engineer Refactoring
Phase III: Presentation Layer Split
Program
…
processing
….
SET KEY
INPUT USING
MAP
…
processing
….
Dialog (Program)
SET KEY
INPUT USING MAP
MOVE 1 TO #NAV-BLOCK
CALLNAT ‘NEWSUBP’ #DATA
Business logic (Subprogram)
DECIDE ON FIRST VALUE OF #NAV-BLOCK
VALUE 1 PERFORM ##BLOCK1
VALUE 2 PERFORM ##BLOCK2
..
END-DECIDE
…
DEFINE SUBROUTINE ##BLOCK1
Processing
END-SUBROUTINE
DEFINE SUBROUTINE ##BLOCK2
Processing
END-SUBROUTINE
Natural Engineer - Refactoring
Phase III – Presentation Layer
Separation
Natural Engineer - Refactoring
Phase III – Presentation Layer
Separation
Natural Engineer - Refactoring
Phase III – Presentation Layer
Separation
Examination of Cross-Reference Records
Natural Engineer: Refactoring
Phase III: Presentation Split
Items created:
GDAPDA-A – Copy of the GDA
XX021A01 – Map PDA
XX021A02 – Local data PDA
XX021A03 – PDA of XX021L01
XX021A04 – PDA of XX021L02
XX021A05 – PDA of XXMTHVAL
XX021C01/2 – Copy data Map/Local
XX021N01 – Subprogram with BL
XX021P01 – Dialogue program
Natural Engineer Refactoring
Phase III – Presentation Layer
Separation
Natural Engineer Refactoring
 Phase III – Presentation Layer Separation
Natural Engineer Refactoring
Limitations of Refactoring (due to the
nature of an automated process)
Duplication of processing rules in generated
subprograms
 As the subprogram is generated per map, if two maps
have the same processing rule, then it is duplicated in
two subprograms
 This can be addressed by similar code identification
A single program, due to the internal structure,
may generate many blocks. This may make it
difficult to expose as a service.
The Blocks are per program and when reworking
the UI, it may not be a 1:1 relationship. Are the
components truly reusable? Maybe not!
Natural Engineer: Refactoring
Natural Engineer Refactoring
Alternative Approach…
Ask the Question:
WHAT VALUE DOES THIS GIVE
ME?
Natural Engineer Refactoring
Start from the Data Model
Why?
All operations within a system stem
from the database data usage
Natural Engineer: Refactoring
The Idea:
Build components based on the conceptual
entities
List Function
Access Function
• Includes formatting
Update Function
• Includes Validation
Source for the new components within
existing application code
Natural Engineer Refactoring
An application tends to have
several functions
Natural Engineer Refactoring
 Where is the code for the new components?
Already in the existing application and ‘normally’
modularlized
 Assuming Phase I completed, then the access to the
database should be in discrete code.
 Locate code using existing Natural Engineer
functionality.
Current estimation based on real projects:
 40% of existing code will be reused (not navigation logic)
 This 40% of code will build over 80% of the new
components
 Rest of component delivered by Object Builder for
Refactoring
Consolidate duplicate code as you go!!!!
Natural Engineer Refactoring
Alternative Approach
Natural Engineer Refactoring
Incrementally refactor each
function…
Natural Engineer Refactoring
Incrementally refactor each
function…
Natural Engineer Refactoring
 If the Data Model is also changing, utilize DB
Split on the new access modules to create a
‘data shield’ between the application and the
physical data.
Natural Engineer Refactoring
The incremental approach means:
• LESS RISK!!!
Resulting in real value for customers:
• Single route to database
• Truly reusable components
• New UI not dependent on existing UI (as the
components based on conceptual entites).
• Improved reliability and maintenance of
application.
• Improved time-to-market for ever increasing
business requirements
Usage Scenario
Natural Application
Web
Application
EntireX
U.I
U.I
U.I
B.L
B.L
B.L
D.B
D.B
D.B
Interne
t
Adabas
Implemented with EntireX, IDL Generator, JAVA Class, MQ, Applinx, …
Usage Scenarios
 (Re)Usage of new generated DB objects
Browser
Presentation dialog
with I/O
Navigation logic
Program with
Presentation Logic
Business Logic
Database I/O
Implemented with Natural Business Services, Application Composer, HTML, …
Usage Scenarios
 (Re)Usage of business logic objects and DB I/O
Browser
Presentation dialog
with I/O
Program with
Navigation logic
Presentation Logic
Business Logic
Database I/O
Implemented with Natural Business Services, Application Composer, HTML, …
Natural Engineer Refactoring
 The approach
 Natural Engineer provides a Toolkit to assist with
Refactoring Projects - One solution will not cover all projects
 High level of automation
 Result
 Flexible – UI independence
 Easy Maintenance
 Reusability of business logic for other and new applications
 Represents a Service Oriented Architecture
 Business
 Cost effective solution
 Project can be outsourced
 Opens application for future changes
 Stay competitive with reusable, stable business logic