Le 05/03/2013 16:14, Frank Church a écrit :
How do Lazarus users handle exceptions in procedures which are running
in data modules?

A lot of the guides and examples demonstrate raising exceptions, which
generally display dialogs to the user that an exception has occurred.

But what is the best way to handle them if they occur inside data
modules as they may not have a user interface, or are even not
supposed to have any, but then somehow communicate the exception back
to the user interface is required?

In my view it is either by passing a var parameter to the procedure in
the data module which returns some information about the error, or
changing the procedure into a function and return info about the error
in the result. On the other hand using functions messes up the reading
of the program because it make the return values appear to be the
subject of the computations.
Right. This is why I decided once for all to report errors AND return values on a function call. I use the following proto: function DoingSomething(const arg1: type;...; out Msg: String): Boolean (or whatever the result should be). This assumes, of course, that the function returns some meaningfull information when everything runs well and a predefined error value otherwise (I often use -1 in case of integers). The OUT argument Msg will be used by the function to explain why the thuction failed and will be empty if the function works OK. The Msg out parameter could be whatever you need, not olny a string.

What are the best practices in Lazarus or Delphi with dealing with
this kind of situation? Are there some frameworks for handing this
type of problem?
The only rule that I always apply concerning exception handling is to process the exception depending on if the concerned code is playing in the data layer or the presentation layer. Said in other words, do I play with data or the user interface ?
Obviously, in a DM you are in the data layer.
Rule: in data layer push exception results (re-raise the exception for instance) to the caller whereas on presentation layer, display the exception to the user and ask him what action to do next. In any case I never mix data and presentation layers processing. This also means that data layer is never affected by what happens in the presentation layer and vice-versa except by the natural ways: functions, procedures and object properties and methods.





--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to