EFinanceFactory Andriy Kurhanevych, development group manager.
-
Upload
chastity-mccarthy -
Category
Documents
-
view
215 -
download
1
Transcript of EFinanceFactory Andriy Kurhanevych, development group manager.
eFinanceFactory
Andriy Kurhanevych, development group manager
Refactoring project
Old implementation No scalabelity Poor extensibility,
changeability and reuseablity
Antipatterns almost not at all OO no interfaces no basic pattern responsibilities in the
classes are difficult to determine
code duplication ...
Customer needed Scalability Better extensibility,
changeability, reuseability High decoupling between
business logic and user interface
Project goals
Scalability Maintainability Extensibility Internationalization Additional business rules
New Architecture
eFinanceFactory
Additional features
Project profile and phases
Requirements
Architecture basis
Prototype
Full migration of the DCB web site
Migration of all other Web-Applications
eFF1.1
eFF 1.2
eFF 2
Internationalization
eFinanceFactory
Size > 5 PY
Length 54 weeks
Begin December 2001
End January 2003
Distributed development
Customer (DCB)
ULYBIN (2) New Ground (2)
Continental Software (3)
Maximal Solution (2)
- Management - Analysis- Design- Implementation- Testing
- Implementation- Testing
- Implementation- Testing
- Management - Analysis- Testing- Deployment
Phase development process Tasks and problems management Web Tool
MS-Project plan
Software Architecture Document
Requirements Specification
Rational Rose UML model
Release Notes
Test cases
Technical Acceptance Document
Requirements management
Design
Management
Automated Deployment Procedure (based on Jakarta Ant)
Deployment
Customer (DCB)
Code Review
Web Repository (IIS + FrontPage Server Extension)
Implementation
Keystone
define and assign tasks
Continental Software (3)
ULYBIN (2)
Technical Acceptance
Automated Unit Tests (JUnit)
Rational Robot JTesting
(based on DCB standards and IEEE templates)
Web-based development
Tasks and defects management Web Tool (Keystone) Tracking tasks and problems Priorities management Automated e-mail notification
Documents and sources Web repository (IIS 5.0 + FrontPage extension) Versions management Checkin/checkout per Internet
Development platform Technologies:
J2EE: JDK1.2.2,, EJB 1.1, JSP 1.1 Web technologies: Java Script, XML, XSLT
Application and Web servers: IBM WebSphere Advanced Server 3.5.3 (target) Jboss 2.4.3, Tomcat 3.2.3 (for quick development only)
Database: Oracle 8.2
Tools: MS Project 2000 MS Visual Studio 6.0 IIS 5.0 + FrontPage extension Rational Rose 2000 Rational Robot J 2000 Keystone Jakarta Ant 1.4
Example of iteration plan
Task names contain numbers of the corresponding tasks in the Keystone
Save calculation Send calculation per emailPrint calculation
Calculate via direct access
External Application
Pass calculation on
CalculationType
productClassID : intcustomerTypeID : int
(from calculationdata)
User
(from Use Case View)...)
Choose calculation type
+edit
Input parameters
<<include>>
Display action info
CalculationResult
installment : floatisActionApplied : booleanactionIdentity : FPActionIdentity
(from calculationdata)
Display Vehicle Image and links
<<include>>
Calculation data operation
CalculationInput
vehiclePrice : floatdeposit : floatvehicleIdentifier : VehicleIdentifiercurrencyID : StringcontractTerm : intisDepositMethodPercent : booleanresultCurrencyValuesFractionPrecisionresultPercentageValuesFractionPrecision
(from calculationdata)
+input/edit
Input desired installment
Abstract Calculation
+Chooses implementation
<<include>>
Display calculation data <<extend>>
<<include>>
+display
<<include>> <<extend>>
+display
Calculate by installment <<include>>
<<include>>Calculate
<<include>>
<<include>>
<<extend>>
Find Finance Product
<<include>>
Example of Use Case Diagram Calculation functionality common for all calculation types (determined by customer type and product class)
Set of input/output parameters and calculation logic depend on the calculation type
Example of Use Cases analysis Calculation types hierarchy and common parts
Abstract Calculation
(from AbstractCalculation)
Financing
PrivateLeasing
AbstractFinancing
Plus3Financing
AbstractLeasing
<<include>>
Leasing
<<include>>
PrivateFinancingPrivateAbstract Financing
<<include>>
PrivatePlus3Financing
<<include>>
BusinessFinancing BusinessPlus3 Financing
BusinessAbstract Financing
<<include>>
<<include>>
BusinessCalculation
<<include>>
BusinessLeasing
<<include>>
Example of input page
Example of output page
J2EE platform architecture
Internet explorer WebSphere cluster Oracle
Middle tier architecture
com.dcb.eff.gci.ui
financefactory
JSP
com.dcb.eff.gci
...gci.facade
...gci.sessionfacade...entities
Business Delegate EJB pattern:- hides all EJB implementation details- minimizes coupling between presentation-tier and business services
Session Facade EJB pattern:- hides persistence implementation details (entity beans)- reduces number of remote method invocations between client and server
Generate XML, XSLT
... ... ...
Example of EJB patterns use
CalculatorFacadeServiceLocator
<<static>> getCalculatorServiceHome()<<static>> getCalculatorBusinessDataServiceHome()<<static>> getInitialContext()
(from ...gci.sessionfacade)
CalculationInput
vehiclePrice : floatdeposit : floatvehicleIdentifier : VehicleIdentifiercurrencyID : StringcontractTerm : intisDepositMethodPercent : booleanresultCurrencyValuesFractionPrecisionresultPercentageValuesFractionPrecision
(from calculationdata)
CalculatorInputRelatedBusinessData Interface
getProductClassName()getCustomerTypeName()
getCurrencyName()getVehicleInfo()
getVehicleURLs()getVehicleMakeName()
getVehicleMainGroupName()getVehicleModelName()
getTermRange()getVehicleMakeIdentities()
getVehicleMainGroupIdentities()getVehicleModelIdentities()getVehicleTypeIdentities()
CalculationType
productClassID : intcustomerTypeID : int
(from calculationdata)
CalculatorInterface
setCalculationType()getCalculationType()
setCalculationInputAndType()setDefaultDepositPctByCalculationTypeChange()
setDefaultVehicleForMainGroup()setDefaultVehicleForMake()setDefaultVehicleForModel()
getCalculatorInputRelatedBusinessDataInterface()load()save()
S
CalculatorService
<<HomeMethod>> create()<<HomeMethod>> create()
(from ...gci.sessionfacade)...)
CalculatorBeancalculatorService : CalculatorServicecalculationType : CalculationTypecalculationInput : CalculationInputcalculationResult : CalculationResultruleBrokenException : CalculatorRuleBrokenException
CalculatorBean()getCalculatorRuleBrokenException()isDefaultDepositPctByCalculationTypeChange()
<<EJB-reference>>
<<obtain>> 1
<<use>>
S
FinanceFactoryStateful Calculator
setDimension()calculateDimension()getRuleViolations()
getDimension()getViolatingRuleDimensionNames()
getFloatDimensionRange()<<HomeMethod>> create()
(from services)
FinanceCore(from financefactory)
FinanceProductPK
productName : StringproductVersion : String
(from businessdata)
CalculationInterface
setCalculationInput(calculationInput : CalculationInput) : voidgetCalculationInput() : CalculationInput
setDefaultDepositPctByVehicleChange(value : boolean)calculate() : void
calculateByInstallment(installment : float) : voidisCalculated() : boolean
getCalculationResult() : CalculationResult
CalculationResult
installment : floatisActionApplied : booleanactionIdentity : FPActionIdentity
(from calculationdata)
FPActionIdentity
actionName : StringactionNumber : String
(from businessdata)
FPActionInfo
actionDescription : StringvalidFrom : TimestampvalidTo : TimestampvalidForNew : booleanvalidForVorfuehr : booleanvalidForUsed : boolean
(from businessdata)
FinanceProductValue
isAction : booleanusage : byteleasfin : bytebaseProduct : Stringintext : byteproduct : Stringsort : intproductVersionElu : StringvalidForJahresWagen : booleanvalidForAVRueckLaeufer : booleankulanzSplitting : int
(from ...entities)
E
FinanceProduct
getData()getActionIdentity()
getActionInfo()<<HomeMethod>> findActionsByCalculationTypeAndTerm()
<<HomeMethod>> findByCalculationTypeAndVehicleTypeAndTerm()
(from ...entities)
Business Delegate
Service Locator
Session Facade
Value Object
<<use>>
<<use>>
Example of GoF design patterns use
AbstractFinancingCalculator
FinancingCalculator
PrivateLeasingCalculatorPrivateFinancingCalculatorPrivateAbstractFinancingCalculation PrivatePlus3FinancingCalculator
BusinessFinancingCalculatorBusinessAbstractFinancingCalculation BusinessPlus3FinancingCalculator BusinessLeasingCalculator
BusinessCalculation
Plus3FinancingCalculator LeasingCalculator
AbstractLeasingCalculation
CalculationInterface
setCalculationInput()getCalculationInput()
setDefaultDepositPctByVehicleChange()calculate()
calculateByInstallment()isCalculated()
getCalculationResult()
(from ...gci.facade)
InclCalculation
CalculationDataHandlingStrategy
setFFCalculatorInput()getFFCalculatorOutput()
handleBrokenRules()
CalculatorPrimitiveOperations
getFinanceProducts()getCheapestCalculationComparator()
getCalculationResultClass()calculateDeposit()
CalculatorTemplateMethods
calcPrimitiveOperations : CalculatorPrimitiveOperationscheapestFinanceProduct : FinanceProduct
calculate()calculateForFP()getUsedFinanceProduct()calculateForFPByInstallment()
AbstractCalculator
calculationInput : CalculationInputcalculationResult : CalculationResultisCalculated : boolean
getProductClassID()getCustomerTypeID()getCalculationInputClass()getDefaultDepositPercentage()
CalculatorServiceBean
calculationType : CalculationType
<<EJBSessionBeanImpl>>
StrategyTemplate Method
Example of Sequence Diagram
: User : edit_calculation_input.jsp : CalculatorBean
The class of the CalculationInput is changed. If vehicle is not allowed for the new calculation type then it is changed to default allowed value.
All entered parameters are passedredirect = "edit_calculation_input.jsp"
Form changes: - new set of fields (according to class of CalculationInput)- new product class or customer type- possibly new vehicle model and type lists, vehicle, terms list and term
change product class or customer type
: edit_calculation_input_ctrl.jsp
request
fillCalculationTypeFromRequest(CalculationType)
include sequence 'GetCalculationInputFromRequest'
setCalculationInputAndType(CalculationInput, CalculationType)
redirect
include sequence 'DisplayCalculationData'
getCalculationType( )
Automated unit testing
Testing class for each business case and each significant parameter set
Near 100 testing classes in the project Automatic script running all test cases and
informing on errors Daily cross-testing between developers
teams
Testing automation with Rational Robot J
Automated black-box testing of user interface Separate tests of all business cases and all
parameter sets Automatic script running all tests nightly
Quality assurance
Tasks and defects management system (Keystone) Tracking tasks and defects Priorities management
Version management system (sources web repository)
Analysis and design UML model Many EJB and GoF design patterns
Code review and refactoring Automated testing
Automated unit testing (JUnit) Automated testing of user interface (Rational Robot J)