[
https://issues.apache.org/jira/browse/FINERACT-2080?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17931224#comment-17931224
]
Adam Saghy commented on FINERACT-2080:
--------------------------------------
Some of the work was done and now the Loan entity is 3592 lines long.
Work get to be continued in 1.12
> 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
> Priority: Major
> Fix For: 1.11.0, 1.12
>
>
> 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)