2

例外を介して値を返すJava関数はベストプラクティスですか、それとも欠点がありますか? 私の要件は、Java DAO関数が、サイズが制限されたデータのコレクションを返すことです(基本的に遅延読み込み)。コレクションの合計サイズを取得する必要があります。したがって、合計カウントのフラグを Java DAO 関数に渡すと、問題は Java DAO 関数からカウントを返すことでした。例外を介してカウントを取得しても問題ありませんか? これは良いアプローチですか?他のソリューションはいつでも歓迎します。

編集:
例外を使用する理由は次のとおりです:ユースケースを説明しましょう:アクションレイヤーとdaoレイヤーがあります。アクションレイヤーでは、「5(if、else)条件」の周りを使用して、DBから制限されたカウントでさまざまなタイプのデータコレクションを取得しました。私の次のアクション タスクは、制限されたカウントなしでコレクションの合計カウントを取得することでした。どうするかという問題は、より多くの if 条件を避けることでした。だから私が考えたのは、EXCEPTIONを使用して合計数を返し、アクションレイヤーでクリーンを処理することでした。ここでは、合計数またはデータ リストのいずれかが必要です。

4

5 に答える 5

4

例外を介して値を返すJava関数はベストプラクティスです

私はこの良い習慣を考慮しません。通常のプログラム フローを処理する場合ではなく、例外的な状況でのみ例外を使用します。

課題は、Java DAO 関数からカウントを返すことでした

単一の値ではなく、常にコンテナーを返すことができます。コンテナ オブジェクトに返したいすべての値を追加してから、コンテナ オブジェクトを返します。

public MyContainer getDAOListAsContainer() {
   MyList myList = ...;   // get the list from somewhere
   int mySize = 42;
   return new MyContainer(myList, mySize);
}

size()それに加えて、Java コレクション クラスは、通常、メソッドを通じてすでにそのサイズを「認識」しています。したがって、すでに のようなものがあるList場合は、そのサイズを次のように取得できます

List result = getDAOList();
// result.size() now contains the number of elements
于 2013-07-30T13:45:16.907 に答える
2

例外は、例外的な動作を示します。つまり、予期しないことが起こったということです。アプリケーションの状態についてわかっていることは、何か問題が発生したということだけです。カウントが戻ってくるかどうかは実際にはわかりません (データベースは正しいかもしれませんが、ORM レイヤーに一貫性がないため)。

例外から「ちょっと-DAOに問題があります」以外の情報を取得することは考えません。

于 2013-07-30T13:46:52.667 に答える
1

私はそれを良いアプローチとは考えていません。

情報や制御フローを取得するために例外を使用すると、Java が例外の作成およびスローのプロセス中に大量の情報を収集する必要があるため、パフォーマンスに影響を与えます。

于 2013-07-30T13:56:40.597 に答える
0

通常、この方法で例外を使用する人はいません。
そのため、後でコードを保守している人にとっては混乱/迷惑になります。

于 2013-07-30T14:01:28.297 に答える
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;
}
于 2013-07-30T13:51:16.607 に答える