I'm not sure of the size and scope of your software system - and therefore how much architecture you think is appropriate to build into it.
In general terms, its usually better to "separate concerns" - a given code module should have one job and do that job well; this means it should only have one reason to change. The SOLID design principles address this and discuss the various motivations and considerations.
Of your options, the first option is "better" as separates two different ideas:
Using this approach means code modules can more easily be reused and composed in different ways.
Further reading: