在写N层结构应用程序时候经常得涉及到层次间方法的调用.调用具有返回值的方法时,象方法A调用方法B,正常情况下方法B应该返回正常值,但若是方法B找不到满足方法A的结果集或是有异常情况发生,这时我们一般采用特殊值来返回,以来标示方法B返回的不是正常值,然后在方法A中根据B中返回的特殊值做相应的处理.
对于这种情况,我们要在方法A和方法B中同时做处理,返回的这个特殊值是方法A和方法B的共同约定值,两个方法约定好在异常或没预料情况发生时方法B应该返回什么值,同时方法A也应该知道这个值是什么,因为它需要知道当方法B返回给它这个值时预示着什么问题发生,然后再做相应处理.这样处理的话你会发觉这两方法联系太紧密了,如果很多方法间都这样处理,这样的话层次间藕合度也加大了, 这并不是我们期望看到的.
我们可以考虑用自定义异常来解决这样问题,参考了宝玉的
对于这种情况,我们要在方法A和方法B中同时做处理,返回的这个特殊值是方法A和方法B的共同约定值,两个方法约定好在异常或没预料情况发生时方法B应该返回什么值,同时方法A也应该知道这个值是什么,因为它需要知道当方法B返回给它这个值时预示着什么问题发生,然后再做相应处理.这样处理的话你会发觉这两方法联系太紧密了,如果很多方法间都这样处理,这样的话层次间藕合度也加大了, 这并不是我们期望看到的.
我们可以考虑用自定义异常来解决这样问题,参考了宝玉的
下面还只是简单实现错误信息提示,还没有异常修复或回滚.只是起个抛砖引玉.更多的以后还会继续下去.
CustomException.cs
CustomException.cs
BlogExceptionType枚举
XmlMessageMananger.cs
message.xml
如果自定义异常类中定义了新的字段,我们必须让其实现ISerializable接口的GetObjectData(SerializationInfo info,StreamingContext context)方法和一个特殊的受保护的构造器CustomException(SerializationInfo info,StreamingContext context).其中GetObjectData()方法用来序列化新定义字段以及基类(ApplicatonException)定义的字段,而特殊构造器是为反序列化新定义的字段和基类定义字段。
象是CustomException类中若定义一个新字段field1.我们应该在CustomException类中实现GetObjectData方法和CustomException(SerializationInfo info,StreamingContext context)构造器.
private string field1;
//序列化
public override void GetObjectData(SerializationInfo info,StreamingContext context)
}
//序列化