Following clean architecture which was describe by Uncle Bob, all your code that contains business (domain) logic (rules) should be inside business layer.
For example we are developing mobile application for online ordering food / clothes. Does not matter.
Presentation Layer: (Consists of view and presenter)
- Presenter - handle view intents (button clicks, view rendered and etc), call business interactors, after received result from interactors, says to view to render current state of screen / layout.
- View - nothing more than render UI, keep view stupid, all your view logic should be in presenter.
Example case: In this layer you could check for example: user oped cart screen, your presentation layer makes request to interactor which returns cart items. If list is empty your view shows layout with title "Your card is empty", otherwise shows items list.
Business / Domain Layer: (Consists of interactor, helper classes and etc.)
Rule number one is keep your domain layer pure. If you using gradle you can use multi-modules with empty dependencies. Only language, rxjava cause it is almost standard of our time.
Example case: You need to validate user order information (delivery address, initial). All your logic should be here. Length check, regex validate and etc.
Data Layer:
Knows how to save, fetch, update, delete informations. All about persistence. In android cases: data layer could make http request via retrofit2, room orm and etc. Cache starts here.
If your app doesn't contain a lot of business rules, you could avoid business layer. It depends on the project.
Also important to use SOLID principles. It will make your architecture understandable, flexible and maintainable. Read more here.