0

基本的に Hibernate を介してデータベースから Bean オブジェクトを取得し、データベースに格納する前に 2 つまたは 3 つのプロパティの値を変更するコードの一部があります。

実際の例を見てみましょう。私のアプリケーションの目的は、数人が MCQ テストを受けられるようにすることです。ユーザーが回答を送信するたびにスコアを更新してデータベースが過負荷になるのを防ぐためHashMapに、テストの最後にデータベースにフラッシュされるスコアカウンターを に保存しています。また、テストが終了した時刻を示すタイムスタンプを更新する必要があります。

私の現在の設計には 2 つの機能が含まれます。

この最初の関数は、スコアを からHashMapデータベースにフラッシュします。

private void flushScoreToDatabase(String id) {

    int score = scoreMap.get(id);

    Session session = HibernateUtil.getSessionFactory().getCurrentSession();

    try {
        session.beginTransaction();
        Student student = (Student)session.get(Student.class, Integer.parseInt(id));
        student.setScore(score);
        session.getTransaction().commit();
        scoreMap.remove(id);
    } catch (HibernateException e) {
        session.getTransaction().rollback();
    }
}

2 番目の関数には、タイムスタンプの更新が含まれます。

private void updateTimestamp(String id) {
    Session session = Hibernate.getSessionFactory().getCurrentSession();

    try {
        sesssion.beginTransaction();
        Student student = (Student)session.get(Student.class, Integer.parseInt(id));
        student.setEndTime(timestamp);
        session.getTransaction().commit();
    } catch (HibernateException e) {
        session.getTransaction().rollback();
    }
}

id両方の関数は、認証されたセッションからユーザーのを取得する別の関数によってラップされます。

これには 2 つのステートメントと、同じユーザーの 2 つの異なるプロパティを更新するためだけSELECTの 2 つのステートメントが含まれるため、かなりコストがかかります。UPDATE

SRP に準拠しながらコードを設計するためのより適切な方法はありますか?

4

1 に答える 1