2016-09-27 10 views
-2

私は例外をスローすることができ、コンストラクタと私のモデルクラスがあります。その後コンストラクタの例外または投げ込みですか?

public class BookModel { 

private Book book; 
String authorName; 

public BookModel(Book book) { 
    this.book = book; 
    try { 
     this.authorName = (AuthorLocalServiceUtil.getAuthor(book.getAuthorId())).getAuthorName(); 
    } catch (PortalException | SystemException e) { 
     e.printStackTrace(); 
    } 
} 

が、私はここに新しいオブジェクトを作成します。

for (Book book: bookList) { 
     books.add(new BookModel(book)); 
} 

だから、私の質問は、私はコンストラクタで私の例外をキャッチする必要がありますかオブジェクトの初期化の瞬間に?私は本当にあなたの助けが必要ですので、非常に初心者です。

+0

私はこれが例外の適切な場所であるかどうかわからない。それは本当にあなたが例外を使って何をするつもりかによって異なりますが、私は個人的にはコンストラクタではなくオブジェクトを作成するときにそれを一歩高くします。 –

+0

損傷チェック例外のもう1つの例は、コードの例外です。そして彼らはそれを増進することになっていました。 –

+0

ここでレイヤの境界線を穿孔しています。モデルは積極的にサービス層にアクセスすべきではありません。データをプッシュするパッシブコンポーネントでなければなりません。 –

答えて

1

BookModelコンストラクタは例外をスローする必要があります。コンストラクタにそれを記録し、何も間違っていないかのように例外を「呑み込む」ことは、バグを引き起こす可能性があります。

これらの例外が発生する可能性は低いか、またはダウンストリーム発信者が例外を処理できないと思われる場合は、RuntimeExceptionにラップして広告する必要はありませんそれらはコンストラクタの署名に含まれます。あなたの特別な場合には

public BookModel(Book book) { 
    this.book = book; 
    try { 
     this.authorName = (AuthorLocalServiceUtil.getAuthor(book.getAuthorId())).getAuthorName(); 
    } catch (PortalException | SystemException e) { 
     throw new RuntimeException(e); 
    } 
} 
1

、例外処理は、芋BookModelのコンストラクタの一部であってはなりません。 有効なBookオブジェクトと作成者名を使用してBookModelインスタンスを作成するとします。だから私は、あなたが、著者名を取得しようとしているBookオブジェクトのそれぞれについて

public BookModel(final Book book, final String authorName) { 

のようなものにコンストラクタを変更します。検索に問題がある場合、キャッチブロックが入力されます。だから私はこのように試してみる:

for (final Book book: bookList) { 
    String authorName =null; 
    try { 
    authorName = (AuthorLocalServiceUtil.getAuthor(book.getAuthorId())).getAuthorName(); 

    } catch (YourException exception){ 
    ...logging, exception handling continue in loop,... 
    } 
    BookModel model = new BookModel(book, authorName); 
    books.add(model); 
} 
関連する問題