[
https://issues.apache.org/jira/browse/FINERACT-2080?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Adam Saghy updated FINERACT-2080:
---------------------------------
Description:
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
was:
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
> 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
>
>
> 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)