Refactor the BaseClass descendants to more logical coupled units
Problem
We have the BaseService
class in the app/services
which is used by many classes from different domains:
[5] [payment_app][development] pry(main)> BaseService.descendants
[
[ 0] Salesforce::FindAccountService < BaseService,
[ 1] Salesforce::CreateQuoteObjectsService < BaseService,
[ 2] Salesforce::CreateOpportunityObjectsService < BaseService,
[ 3] Salesforce::CreateObjectService < BaseService,
[ 4] RailsAdmin::PerformReconciliationService < BaseService,
[ 5] RailsAdmin::CreateLicenseService < BaseService,
[ 6] RailsAdmin::CreateCloudActivationService < BaseService,
[ 7] Gitlab::UpgradeSubscriptionPlanService < BaseService,
[ 8] SubscriptionManagerService < BaseService,
[ 9] FindOrCreateSalesforceAccountService < BaseService,
[10] CreateSalesforceContactService < BaseService,
[11] CreateOrderService < BaseService,
[12] Salesforce::BaseOpportunityService < BaseService,
[13] Salesforce::CreateQuoteService < Salesforce::CreateObjectService,
[14] Salesforce::CreateQuoteRatePlanService < Salesforce::CreateObjectService,
[15] Salesforce::CreateQuoteRatePlanChargeService < Salesforce::CreateObjectService,
[16] Salesforce::CreateQuoteAmendmentService < Salesforce::CreateObjectService,
[17] Salesforce::CreateLeadService < Salesforce::CreateObjectService,
[18] Salesforce::FindOrCreateLeadService < Salesforce::CreateLeadService,
[19] Salesforce::CreateOpportunityService < Salesforce::BaseOpportunityService,
[20] Salesforce::CloseOpportunityService < Salesforce::BaseOpportunityService
]
This could lead to unpredictable difficulties because any change in this base class affects services from different and non-connected domains. That makes our business logic extremely coupled to this class.
Proposal
We should either remove this class and move its content to the corresponding smaller classes or decouple the classes from the snippet above to their own units.
Result
Next steps (if any)
How will we measure success?
Edited by Vitaly Slobodin