I'm tweaking some functionality in v2.3 to fit my business and I'm wondering if I'm doing it wrong.
If I want to change the code in a service, should I be editing the service or creating a new class that inherits from it?
Consider OrderTotalCalculationService: I want to make a change to GetOrderSubtotalDiscount but the rest of the class is fine. I could create a new service, inherit OrderTotalCalculationService, override just that function, and register it at a higher priority from the original service. I think this is cleaner than just modifying OrderTotalCalculationService because now if I upgrade nopCommerce, I have one less merge to worry about.
But in WorkflowMessageService, let's say I want to add a new function. How does that work when everything is running off an Interface? Do I do the same as above but add the new signature to the interface and put a dummy implementation into the original service? Or do I change the interface and just modify the WorkflowMessageService to add my implementation without ever creating my own subclass?
EDIT:
Should my subclasses be in their own project mirroring the nop format and those projects added to the solution?
MYBIZ.Core
MYBIZ.Domain
MYBIZ.Services
etc
Or maybe I create one new project and use those names as my namespaces inside.