When your domain layer or business layer (whatever you want to call it) is completely separate from your UI, how does it gather the information it needs to complete a request?
For example, suppose the UI issues a request to add a line to a purchase order, and the business rules determine that you need an authorization code for some reason. How does the domain layer communicate this back? Return some kind of response code indicating it requires authorization? Fire a "need authorization" event and see if anyone responds? Accept some sort of IAuthorizationProvider that the UI will implement?
All of these seem okay, but I struggle with having an explosion of possible things that the business could need. Just continuing with the purchase order example, what if some items need a color? Some need a hazardous materials declaration id? Some need a simple "this is rare, are you sure?". The list could go on and on. It feels like deciding you need this info definitely belongs in the domain layer. In a non-layered app, you'd just pop up a dialog and get what you need. How do you do it in a properly layered application?