I'm starting a new project and I want to follow a Clean Architecture(ish) approach. I've modeled my projects in that manner (attached diagram).
For the API I'm using FastEndpoint since I like it, it's performance, and the pre-built tools it comes with (such as tokens, validations, mappings, bus and queues).
I'm used to N-Tier applications. Over the years been changing styles where I rely on interfaces I could easily swap part of the application or database if needed (to be honest never happens).
In the following case my endpoint has interfaces injected from the application project that contain the methods I need to perform an action (for instance I have an IUsersManagment that has methods for creating/updating/deleting/changing password/etc... for my users). Those also include needed validation to perform for handling user data. I would have something similar for other aspects of my application.
My dilemma is: should I use the interfaces as described, which I believe gives separation between the presentation and application layer (being careful that I have an implementation for everything and go though the application layer). Or should I use a Mediator approach? In such case the presentation sends a command that is handled by a handler - giving maybe better separation. In such case I saw that the handlers and commands are created in the application layer and that means that there is tight coupling between the layers - so does that no mean that the separation is not "clean" and I'm coupling the 2 layers? What about performance hits when using this approach? What I was thinking is maybe have another project that will contain the Mediator commands and will be referenced by the presentation and application layers. In any case when replacing or adding another presentation layer it would require that layer to call the same even handlers instead of using the interfaces?
I'm a bit confused... What am I missing here? What is the advantages and common scenario?