我没有资格评论大师们的观点,但是我知道绝大多数的Java程序员根本就没有领悟“Exception”的真正用处。他们就是把Exception当做异常来理解,没有明白Exception实际上代表了一个UseCase中的异常流的处理。
在使用UseCase来描述一个场景的时候,有一个主事件流和n个异常流。异常流可能发生在主事件流的过程,而try语句里面实现的是主事件流,而catch里面实现的是异常流,在这里Exception不代表程序出现了异常或者错误,Exception只是面向对象化的业务逻辑控制方法。如果没有明白这一点,那么我认为并没有真正明白应该怎么使用Java来正确的编程。
而我自己写的程序,会自定义大量的Exception类,所有这些Exception类都不意味着程序出现了异常或者错误,只是代表非主事件流的发生的,用来进行那些分支流程的流程控制的。例如你往权限系统中增加一个用户,应该定义1个异常类,UserExistedException,抛出这个异常不代表你插入动作失败,只说明你碰到一个分支流程,留待后面的catch中来处理这个分支流程。传统的程序员会写一个if else来处理,而一个合格的OOP程序员应该有意识的使用try catch 方式来区分主事件流和n个分支流程的处理,通过try catch,而不是if else来从代码上把不同的事件流隔离开来进行分别的代码撰写。
总之 Exception <> 异常
BTW:我是支持BE和JG的观点的。我以前在接触C#的时候,就很奇怪C#的这一点了,Anders有他的理由,但是我认为一个良好的面向对象的软件是应该强制使用Exception的。
另外纠正一个错误的观点:很多人喜欢定义方法的返回类型为boolean型的,当方法正确执行,没有出错的时候返回true,而方法出现出现了问题,返回false。这在Java编程当中是大错而特错的!
方法的返回值只意味着当你的方法调用要返回业务逻辑的处理结果的。如果业务逻辑不带处理结果,那么就是void的,不要使用返回值boolean来代表方法是否正确执行。
例如 用户登陆方法
boolean login(String username, String password);
很多人喜欢用boolean返回,如果是true,就是login了,如果false就是没有登陆上。其实是错误的。还有的人定义返回值为int型的,例如如果正确返回就是0,如果用户找不到就是-1,如果密码不对,就是-2
int login(String username, String password);
然后在主程序里面写一个if else来判断不同的流程。
int logon = UserManager.login(xx,xx);
if (logon ==0) {
...
} else if (logon == 1) {
...
} else if (logon ==2) {
..}
这是面向过程的编程逻辑,不是面向对象的编程逻辑。
应该这样来写:
User login(String username, String password) throws UserNotFoundException, PasswordNotMatchException;
主程序这样来写:
try {
UserManager.login(xx,xx);
....
用户登陆以后的主事件流代码
} catch (UserNotFoundException e) {
...
用户名称没有的事件处理,例如产生一个提示用户注册的页面
} catch (PasswordNotMatchException e) {
....
密码不对的事件处理,例如forward到重新登陆的页面
}
分享到:
相关推荐
基于linux C实现Robin调度算法
一、简介MKS Robin 是创客基地为满足市场需求而自主研发的一款产品,配置固件方法更加简单,并配带2.8 寸或 3.2 英寸 TFT 触摸屏,操作界面简洁;
Verilog Round Robin Arbiter Model
robinhood-node, Robinhood交易的NodeJS客户端 private Robinhood API进行交易的NodeJS框架。 不鼓励使用这里 API,因为它并没有正式可以用,并且已经经反向工程。 有关更多信息,请参阅 @Sanko's 非官方文档 。参考...
OpenGL教学包,简单易学,入门必备 一个压缩文件tutors.zip,enjoy it.
Nate Robin OpenGL 教程 编程指南,里面有一些比较简单,但很基础的例子
Laravel开发-round-robin Laravel 5.4 的循环。
Introduction to Graph Theory, Robin Wilson
OpenGL编程指南中提到的教程-Nate Robin的OpenGL教程
创客的 nano 板子的原理图
基于两优先级Round-robin算法PCI仲裁扩展器的设计与实现,陈晓飞,李红信,PCI总线凭借高带宽、高性能、高可靠性、即插即用等多方面的优越性获得了迅速的发展。当PCI总线上挂载多个设备时,为保证多个设备能
round robin demo program
finTech_Robinhood-案例研究 关于Robinhood案例研究的readme.md版本 标题 概述和起源 公司名称:Robinhood Markets,Inc 公司何时成立? -2014 公司的创始人是谁? -弗拉基米尔·特内夫(Vladimir Tenev)和白居·...
分布式无线通信系统中并行Round Robin调度算法研究,蒋占军,李成,在分布式无线通信系统中研究了基于Round Robin(RR)的多用户并行调度算法,通过获取多用户分集增益和空间复用增益来提升系统的吞吐��
SuperBible推荐的资料, 找来给大家共享 从网上找的资料, 包括: tutors, sgi-win32, smooth, 97 note, ceding at E&S
Pi Calculus Robin Milner
2/4/8输入RR调度verilog代码,
Nate Robin的OpenGL实例学习大全 包括如下: glut-3.7.6-bin.zip glut-3.7.6-src.zip sgi-macosx.zip sgi-src.zip sgi-win32.zip tutors-macosx.zip tutors-src.zip tutors-win32.zip
英文第二版 一共51.8m 压缩为三部分 每部分18m
20210711-中泰证券-从Robinhood再看富途的特有优势和未来潜力.pdf