java函数是否通过异常返回值是最佳实践还是有任何缺点?我的要求是java DAO函数返回一个有限大小的数据集合(基本上是延迟加载)。我需要获得集合的总大小。所以我的想法是,如果我将标志传递给java DAO函数进行总计数,那么挑战就是从java DAO函数返回计数。通过例外计算是否可以?这是一个好方法吗?任何其他解决方案随时欢迎。
编辑:
异常的原因是:让我解释一下用例:我有一个动作层和一个dao层。现在在动作层我已经使用了“5(如果,否则)条件”来获得不同类型的数据集合以及来自DB的有限计数。现在我的下一个操作任务是获取集合的总数而不受限制。怎么办是避免更多if条件的问题。所以我认为使用EXCEPTION返回总计数并处理动作层中的清理。在这里,我需要总计数或数据列表。
答案 0 :(得分:4)
是java函数,通过异常最佳实践返回值
我不会考虑这个好习惯。 Use Exceptions for exceptional circumstances only, not when handling normal program flow.
挑战是从java DAO函数返回计数
您始终可以返回容器而不是单个值。添加要返回容器对象的所有值,然后返回容器对象:
public MyContainer getDAOListAsContainer() {
MyList myList = ...; // get the list from somewhere
int mySize = 42;
return new MyContainer(myList, mySize);
}
除此之外,java集合类通常通过size()
方法“知道”它们的大小。因此,如果您已经拥有类似List
的内容,则可以获得类似
List result = getDAOList();
// result.size() now contains the number of elements
答案 1 :(得分:2)
异常表示异常行为 - 也就是发生了一些您没想到的事情。你对应用程序状态的所有了解都是出了问题。你实际上并不知道计数是否会回来(因为数据库可能是正确的,但你的ORM层是不一致的)。
我不会考虑从例外中获取任何信息,“嘿 - DAO的问题”。
答案 2 :(得分:1)
我认为这不是一个好方法。
使用异常来获取信息甚至控制流会对性能产生影响,因为java需要在创建和抛出异常的过程中收集大量信息。
答案 3 :(得分:0)
使用POJO封装两者然后返回。
void CollectionAndSize methodInDAO(boolean neededCollection, boolean neededTotalCount)
{
CollectionAndSize cas = new CollectionAndSize();
//Some code here.
if(neededCollection)
{
collection = getLimitedCollection();
cas.setCollection(collection);
}
if(neededTotalCount)
{
totalRecords = = getnumberOfRecords();
cas.setTotalRecords(totalRecords );
}
return cas;
}
答案 4 :(得分:0)
这不是一个好习惯 - 没有人通常以这种方式使用例外 因此,对于维护代码的人来说,这会让人感到困惑/烦恼。