在写N层结构应用程序时候经常得涉及到层次间方法的调用.调用具有返回值的方法时,象方法A调用方法B,正常情况下方法B应该返回正常值,但若是方法B找不到满足方法A的结果集或是有异常情况发生,这时我们一般采用特殊值来返回,以来标示方法B返回的不是正常值,然后在方法A中根据B中返回的特殊值做相应的处理.
对于这种情况,我们要在方法A和方法B中同时做处理,返回的这个特殊值是方法A和方法B的共同约定值,两个方法约定好在异常或没预料情况发生时方法B应该返回什么值,同时方法A也应该知道这个值是什么,因为它需要知道当方法B返回给它这个值时预示着什么问题发生,然后再做相应处理.这样处理的话你会发觉这两方法联系太紧密了,如果很多方法间都这样处理,这样的话层次间藕合度也加大了, 这并不是我们期望看到的.
我们可以考虑用自定义异常来解决这样问题,参考了宝玉的 下面还只是简单实现错误信息提示,还没有异常修复或回滚.只是起个抛砖引玉.更多的以后还会继续下去.
CustomException.cs
 }
BlogExceptionType枚举
public enum BlogExceptionType
 }
XmlMessageMananger.cs
 }
message.xml
<!-- message.xml -->
<?xml version="1.0" encoding="utf-8" ?>
<root>

<message id="3">
<body>用户名只能由英文字母,数字,下划线组成</body>
</message>

<message id="4">
<body>密码长度必须在5-20之间</body>
</message>

<message id="5">
<body>您输入的验证码不匹配,请重新返回输入</body>
</message>

<message id="6">
<body>用户登陆失败,请重新输入</body>
</message>

<message id="7">
<body>更改密码时出现错误,请您再试一次</body>
</message>

<message id="8">
<body>很抱歉,发生了未知错误</body>
</message>

</root>
如果自定义异常类中定义了新的字段,我们必须让其实现ISerializable接口的GetObjectData(SerializationInfo info,StreamingContext context)方法和一个特殊的受保护的构造器CustomException(SerializationInfo info,StreamingContext context).其中GetObjectData()方法用来序列化新定义字段以及基类(ApplicatonException)定义的字段,而特殊构造器是为反序列化新定义的字段和基类定义字段。 象是CustomException类中若定义一个新字段field1.我们应该在CustomException类中实现GetObjectData方法和CustomException(SerializationInfo info,StreamingContext context)构造器.
|