"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > إتقان Aurora PostgreSQL: نماذج Java المضادة للرصاص والأنظمة اللامركزية المستقلة التي ستجعل فريقك يبكي من الفرح

إتقان Aurora PostgreSQL: نماذج Java المضادة للرصاص والأنظمة اللامركزية المستقلة التي ستجعل فريقك يبكي من الفرح

تم النشر بتاريخ 2024-11-08
تصفح:304

إسمعوا يا فرسان الكود. أنا على وشك إسقاط بعض المعرفة التي ستحول لعبة Aurora PostgreSQL الخاصة بك من ساعة للهواة إلى لعبة الدوري الكبير. نحن نتحدث عن نماذج Java وأدوات الوصول إلى قواعد البيانات التي ستجعل كبار المطورين لديك يبكون من الفرح وسيشتري لك مسؤولو قواعد البيانات (DBAs) بيرة أم لا (يعتمد على عمرك).

لماذا هذا مهم:

  1. الأداء: يمكن للنماذج غير المتقنة والمنظمات اللامركزية المستقلة أن تحول أورورا بسرعة البرق إلى حيوان كسلان يتعاطى المهدئات.
  2. قابلية الصيانة: احصل على هذا الحق، وفي المستقبل سوف ترسل رسالة شكر. إذا أخطأت في الفهم، فسوف تقوم بتصحيح الأخطاء في الساعة 3 صباحًا.
  3. قابلية التوسع: هذه الأنماط هي تذكرتك للتعامل مع ملايين السجلات دون بذل أي جهد.
  4. فعالية التكلفة: الكود الفعال يعني انخفاض تكاليف Aurora. قد يعرف مديرك المالي اسمك.

القواعد الذهبية لنماذج Aurora PostgreSQL وDAOs:

  1. العارضات ليست مجرد حاويات بيانات غبية: يجب أن تعمل العارضات من أجل معيشتهن، وليس مجرد الجلوس هناك بمظهر جميل.
  2. المنظمات اللامركزية المستقلة هي الحارس لقاعدة بياناتك: فهي تقرر ما يتم الدخول إليه، وما يخرج منه، وكيف يحدث.
  3. احتضان قوة JDBC: Aurora PostgreSQL تتحدث JDBC بطلاقة. تعلم كيفية التحدث مرة أخرى.
  4. الاستعداد لما هو غير متوقع: أورورا موثوقة، ولكن قانون مورفي لا يُهزم. تعامل مع هذه الاستثناءات مثل المحترفين.

Aurora PostgreSQL Mastery: Bulletproof Java Models and DAOs That

الآن، دعونا نقسمها:

1. النموذج

public class User {
    private UUID id;
    private String email;
    private String hashedPassword;
    private Instant createdAt;
    private Instant updatedAt;

    // Constructors, getters, and setters omitted for brevity

    public boolean isPasswordValid(String password) {
        // Implement password hashing and validation logic
    }

    public void updatePassword(String newPassword) {
        this.hashedPassword = // Hash the new password
        this.updatedAt = Instant.now();
    }

    // Other business logic methods
}

لماذا ينجح هذا:

  • إنها ليست مجرد حقيبة بيانات. لديها أساليب تغليف منطق الأعمال.
  • يستخدم أنواع البيانات المناسبة (UUID للمعرف، الفوري للطوابع الزمنية).
  • يتولى التحقق من صحة كلمة المرور الخاصة به وتحديثها.

2. واجهة DAO

public interface UserDao {
    Optional findById(UUID id);
    List findByEmail(String email);
    void save(User user);
    void update(User user);
    void delete(UUID id);
    List findRecentUsers(int limit);
}

لماذا هذا الصخور:

  • إنه نظيف وفي صلب الموضوع.
  • يستخدم اختياري للنتائج التي يحتمل أن تكون غائبة.
  • يتضمن مزيجًا من العمليات الأساسية CRUD والعمليات الأكثر تعقيدًا.

3. تنفيذ DAO

public class AuroraPostgresUserDao implements UserDao {
    private final DataSource dataSource;

    public AuroraPostgresUserDao(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    @Override
    public Optional findById(UUID id) {
        String sql = "SELECT * FROM users WHERE id = ?";
        try (Connection conn = dataSource.getConnection();
             PreparedStatement pstmt = conn.prepareStatement(sql)) {
            pstmt.setObject(1, id);
            try (ResultSet rs = pstmt.executeQuery()) {
                if (rs.next()) {
                    return Optional.of(mapResultSetToUser(rs));
                }
            }
        } catch (SQLException e) {
            throw new DatabaseException("Error finding user by ID", e);
        }
        return Optional.empty();
    }

    @Override
    public void save(User user) {
        String sql = "INSERT INTO users (id, email, hashed_password, created_at, updated_at) VALUES (?, ?, ?, ?, ?)";
        try (Connection conn = dataSource.getConnection();
             PreparedStatement pstmt = conn.prepareStatement(sql)) {
            pstmt.setObject(1, user.getId());
            pstmt.setString(2, user.getEmail());
            pstmt.setString(3, user.getHashedPassword());
            pstmt.setTimestamp(4, Timestamp.from(user.getCreatedAt()));
            pstmt.setTimestamp(5, Timestamp.from(user.getUpdatedAt()));
            pstmt.executeUpdate();
        } catch (SQLException e) {
            throw new DatabaseException("Error saving user", e);
        }
    }

    // Other method implementations...

    private User mapResultSetToUser(ResultSet rs) throws SQLException {
        return new User(
            (UUID) rs.getObject("id"),
            rs.getString("email"),
            rs.getString("hashed_password"),
            rs.getTimestamp("created_at").toInstant(),
            rs.getTimestamp("updated_at").toInstant()
        );
    }
}

لماذا هذا عبقري:

  • يستخدم عبارات معدة لمنع حقن SQL.
  • يتعامل بشكل صحيح مع إدارة الموارد من خلال تجربة الموارد.
  • يقوم بالتخطيط بين أنواع Java وأنواع PostgreSQL بشكل صحيح.
  • يطرح استثناءً مخصصًا لمعالجة الأخطاء بشكل أفضل في المكدس.

نصائح المليون دولار:

1. استخدم تجمع الاتصالات

يمكن لـ Aurora التعامل مع الكثير من الاتصالات، لكن لا تهدرها. استخدم HikariCP أو ما شابه ذلك لتجميع الاتصالات.

2. العمليات المجمعة للإجراءات المجمعة

عندما تحتاج إلى إدراج أو تحديث العديد من السجلات، استخدم العمليات المجمعة.

public void saveUsers(List users) {
    String sql = "INSERT INTO users (id, email, hashed_password, created_at, updated_at) VALUES (?, ?, ?, ?, ?)";
    try (Connection conn = dataSource.getConnection();
         PreparedStatement pstmt = conn.prepareStatement(sql)) {
        for (User user : users) {
            pstmt.setObject(1, user.getId());
            pstmt.setString(2, user.getEmail());
            pstmt.setString(3, user.getHashedPassword());
            pstmt.setTimestamp(4, Timestamp.from(user.getCreatedAt()));
            pstmt.setTimestamp(5, Timestamp.from(user.getUpdatedAt()));
            pstmt.addBatch();
        }
        pstmt.executeBatch();
    } catch (SQLException e) {
        throw new DatabaseException("Error batch saving users", e);
    }
}

Aurora PostgreSQL Mastery: Bulletproof Java Models and DAOs That

3. الاستفادة من النسخ المتماثلة للقراءة في Aurora

استخدم مصدر بيانات منفصل لعمليات القراءة لتوزيع الحمل.

4. لا تتجاهل المعاملات

استخدم المعاملات للعمليات التي يجب أن تكون ذرية.

public void transferMoney(UUID fromId, UUID toId, BigDecimal amount) {
    String debitSql = "UPDATE accounts SET balance = balance - ? WHERE id = ?";
    String creditSql = "UPDATE accounts SET balance = balance   ? WHERE id = ?";
    try (Connection conn = dataSource.getConnection()) {
        conn.setAutoCommit(false);
        try (PreparedStatement debitStmt = conn.prepareStatement(debitSql);
             PreparedStatement creditStmt = conn.prepareStatement(creditSql)) {
            debitStmt.setBigDecimal(1, amount);
            debitStmt.setObject(2, fromId);
            debitStmt.executeUpdate();

            creditStmt.setBigDecimal(1, amount);
            creditStmt.setObject(2, toId);
            creditStmt.executeUpdate();

            conn.commit();
        } catch (SQLException e) {
            conn.rollback();
            throw new DatabaseException("Error transferring money", e);
        } finally {
            conn.setAutoCommit(true);
        }
    } catch (SQLException e) {
        throw new DatabaseException("Error managing transaction", e);
    }
}

Aurora PostgreSQL Mastery: Bulletproof Java Models and DAOs That

5. استخدم الميزات الخاصة بـ Aurora

استفد من الاستنساخ السريع الذي توفره Aurora للاختبار، وإمكاناتها الفائقة في تجاوز الفشل في التعامل مع الاتصال لديك.

الخط السفلي:

لا يقتصر إنشاء نماذج Java وDAOs القوية لـ Aurora PostgreSQL على كتابة تعليمات برمجية فعالة فحسب. يتعلق الأمر بصياغة طبقة بيانات قوية وفعالة وجاهزة لأي شيء تريده.

تذكر أن نماذجك و DAOs هي أساس تطبيقك. افعلها بشكل صحيح، وأنت تهيئ نفسك للنجاح. أخطأوا في فهمهم، وأنتم تبنيون على الرمال المتحركة.

توقف الآن عن القراءة وابدأ بالبرمجة. قاعدة بيانات Aurora PostgreSQL الخاصة بك في انتظار ترويضها.

بيان الافراج يتم استنساخ هذه المقالة على: https://dev.to/nislamov/aurora-postgresql-mastery-bulletproof-java-models-and-daos-dal-make-make-team-weep-with-joy-1jkb؟1 إذا كان هناك أي انتهاك ، يرجى الاتصال بـ [email protected] إلى حذفها.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3