[ 
https://issues.apache.org/jira/browse/FINERACT-2080?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Adam Saghy updated FINERACT-2080:
---------------------------------
    Fix Version/s: 1.13.0

> Refactor Loan entity class
> --------------------------
>
>                 Key: FINERACT-2080
>                 URL: https://issues.apache.org/jira/browse/FINERACT-2080
>             Project: Apache Fineract
>          Issue Type: Improvement
>          Components: Loan
>    Affects Versions: 1.9.0, 1.10.0
>            Reporter: Adam Saghy
>            Assignee: Adam Saghy
>            Priority: Major
>             Fix For: 1.13.0
>
>
> At the moment the Loan entity contains 7200+ lines. It’s way too complex and 
> became a monster.
> *Steps to fix the situation*
>  * The business logic needs to be extracted out from this class
>  ** This is an entity, it should only contains the fields, getters, setters 
> and maximum some lightweight methods to manipulate its own state
>  ** At the moment different kind of other classes were injected into this 
> class, all of them need to be extracted into assemblers, services and mapper 
> classes
>  *** transactionProcessorFactory
>  *** loanLifecycleStateMachine
>  *** loanSummaryWrapper
>  *** etc
>  * Overcomplicated methods and business logic
>  ** Need to refactor and simplify them
>  *** 1 method should do 1 thing
>  *** the enormous amount of conditions and overhead need to be resolved
>  *** Example: handleRepaymentOrRecoveryOrWaiverTransaction
>  * We should extract into multiple services / assemblers / mappers as
>  ** Validators
>  ** Creation and modification
>  ** State changes
>  ** Actions on loan
>  ** Disbursement related actions
>  ** Utility actions
>  ** Loan Transaction related actions
>  ** Loan repayment schedule related actions
>  ** Loan balance related actions
>  ** Loan offices related actions
>  ** Loan accounting related actions
>  ** Loan charge related actions
>  ** Interest recalculation related actions
>  ** Loan mapping related actions
>  ** Guarantor related actions
>  ** Loan reschedule related actions
>  ** Delinquency related actions
>  ** Loan mapping actions
>  ** etc
> *Acceptance criteria*
>  * Job is done, when the Loan entity only contains its fields, setters, 
> getters and basic methods to manipulate its own state
>  * It does not contain any helpers class anymore
>  * The business logic extracted into services, assemblers and mappers
>  * The complex methods and business logic split into smaller well defined 
> pieces which can be easily reused



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to