How can I pass error and other messages up from the DAL / Business layers to the UI layer?
<p>Lots of resources say to let the errors "bubble up" from the lower layers, but I am not sure how to achieve that in my application.  Do I need to create a separate utility class for validation or other errors and listen for it at each layer? </p>

<p>For example, if user enters a email address and only unique email addresses are allowed, I assume that I would check for this in the business layer.  When I invoke the business logic from UI, do I just include output parameters in my business classes for errors / error msgs.  Should I treat handled exceptions the same as business rule exceptions?</p>

<p>Here is a BLL code example:</p>

<pre><code>public class user()
{
    public void Save(UserObject myUser, out bool result, out string resultMsg )
    {
    }

    OR

    string saveResultMsg;

    public bool Save(UserObject myUser)
    {
        saveResultMsg = "bad data whatever";
        return false;    

    }

}
</code></pre>
