High-Level Application Architecture Question
- by Jesse Bunch
So I'm really wanting to improve how I architect the software I code. I want to focus on maintainability and clean code. As you might guess, I've been reading a lot of resources on this topic and all it's doing is making it harder for me to settle on an architecture because I can never tell if my design is the one that the more experienced programmer would've chosen.
So I have these requirements:
I should connect to one vendor and download form submissions from their API. We'll call them the CompanyA.
I should then map those submissions to a schema fit for submitting to another vendor for integration with the email service provider. We'll call them the CompanyB.
I should then submit those responses to the ESP (CompanyB) and then instruct the ESP to send that submitter an email.
So basically, I'm copying data from one web service to another and then performing an action at the latter web service.
I've identified a couple high-level services:
The service that downloads data from CompanyA. I called this the CompanyAIntegrator.
The service that submits the data to CompanyB. I called this CompanyBIntegrator.
So my questions are these:
Is this a good design? I've tried to separate the concerns and am planning to use the facade pattern to make the integrators interchangeable if the vendors change in the future.
Are my naming conventions accurate and meaningful to you (who knows nothing specific of the project)?
Now that I have these services, where should I do the work of taking output from the CompanyAIntegrator and getting it in the format for input to the CompanyBIntegrator? Is this OK to be done in main()?
Do you have any general pointers on how you'd code something like this? I imagine this scenario is common to us engineers---especially those working in agencies.
Thanks for any help you can give. Learning how to architect well is really mind-cluttering.