虽然是代码是C#写的,但是实际上想问的是一个UML表达的问题。最近想把程序结构整理一下,就先用UML把模型描述一下,先弄几个序列图,有一个问题不知道怎么处理。我用序列图表达几个正常执行的流程,但是如果在执行过程中发生错误要返回异常信息,在什么图里面表达?

解决方案 »

  1.   

    UML主要用来设计,它并不能代替实现,也不能表达所有代码。对于.net的Exception处理机制,时序图并不能表达。实际上也根本不去表达。你需要另外用其它方式(甚至是自然语言)去说明,例如我们看msdn上关于Exception的机制的描述,就不会跟任何具体的业务逻辑扯在一起去描述。如果是你自己开发远程通讯,那么在通讯框架中首先会支持对于Exception的处理,你的通讯网管程序首先会检查对方传来的是不是Exception,如果是则调用客户程序所注册的一场处理方法(把这个异常作为参数),如果不是才会反序列化强类型的数据并且调用客户程序所注册的通讯处理方法(把这个强类型化的返回对象作为参数)。而时序图则只是描述后者——正常的逻辑处理过程。
      

  2.   

    进一步地说,虽然异常处理应该作为一个“基本处理层”去单独设计,但是你不能在类似的设计中总是遇到纠结这种东西。如果你总是担心这个,说明你的设计过于粗放,你把异常处理当作逻辑控制来设计。在“正常执行的流程”设计中,不会用异常处理作为逻辑控制流程。比如说读取一个文件作为某个业务在地图上的标注图片,那么程序会首先检查此文件是否真的存在(或者如果是远程通讯则会首先判断远端是否返回0字节文件),而不会等到抛出异常时就想当然地处理。因此程序设计总是重构的,其中很重要的一个原因就是你需要加入新的“正常执行的流程”设计来处理以前发现的bug,而不会去用抛出异常来作为正常的时序图设计。