第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

一百個靜態(tài)方法的DataDAO類,如何重構(gòu)

一百個靜態(tài)方法的DataDAO類,如何重構(gòu)

夢里花落0921 2022-06-23 20:09:12
我有一個 DataDAO 類,我的 Servlet 用于對幾種對象類型進行 CRUD 操作。當我剛開始時,我只與這門課做一些事情,所以看起來還可以。但是現(xiàn)在項目越來越大,我添加的每個功能都必須為這個類添加一個新方法,所以我現(xiàn)在有大量的靜態(tài)方法??磥砦覒?yīng)該如何重構(gòu)它,但不確定如何重構(gòu)。有我可以使用的設(shè)計模式嗎?或者有人可以解釋為什么我應(yīng)該或不應(yīng)該擔心它嗎?我這樣做只是為了學習,所以請不要告訴我使用一些簡單的框架,我想盡可能細致地使用 java。這是一個典型的例子:public static ArrayList<Card> getCardsForUser(UserAccount user) {    //TODO: get the username and password then get all flashcards linked to that user and return them in a list    ArrayList<Card> cardsForUser = new ArrayList<>();    try(Connection conn = DriverManager.getConnection(DBURL, un, pw)) {        PreparedStatement pstm = conn.prepareStatement("Select * From flashcard where fk_user_id = ?");        pstm.setString(1,user.getUserID());        ResultSet usersCards = pstm.executeQuery();        while(usersCards.next()){            String cat = usersCards.getString("category");            if(cat == null) {                cat = "null";            }            Card card_new = new Card(usersCards.getString("card"),usersCards.getString("answer"),usersCards.getInt("cardid"),cat,usersCards.getInt("times_right"),usersCards.getInt("times_wrong"));            cardsForUser.add(card_new);        }        System.out.println("Card For User size: "+cardsForUser.size());        return cardsForUser;    } catch(SQLException e) {        //TODO: what happens now ?        e.printStackTrace();        return null;    }}我的應(yīng)用程序基本上是一種創(chuàng)建“抽認卡”來學習的方法。我試圖創(chuàng)建一個接口“DataDAO”,然后讓每個不同對象的子類實現(xiàn)該接口。但是有些操作與界面并不完全一致,而且似乎有很多不必要的工作。為什么這是一個好或不好的方法?
查看完整描述

2 回答

?
倚天杖

TA貢獻1828條經(jīng)驗 獲得超3個贊

你的類名DataDAO本身就暗示設(shè)計中有問題。更好地為不同的對象類型使用單獨的 DAO 類。例如CardDAO,UserAccountDAO等等。

你為什么要做這個方法static?我看不出有什么原因。我認為方法簽名可能是這樣的:

public List<Card> getCardsForUser(String userId)

請注意,我正在返回List而不是ArrayList.

由于您是學習者,因此我還將提及以下幾點:

避免在同一范圍內(nèi)使用多個名稱相似的變量。你有usersCardscardsForUser在你的代碼中。這可能會令人困惑。對于ResultSet,您可以使用resultSet或之類的名稱rs。

遵循 Java 命名約定。因此,它比使用cardNew更好card_new


查看完整回答
反對 回復(fù) 2022-06-23
?
慕勒3428872

TA貢獻1848條經(jīng)驗 獲得超6個贊

這種情況下的最佳實踐是為每種對象類型創(chuàng)建 DAO 類。

將所有內(nèi)容放在全局類中的負面影響是復(fù)雜性、可測試性和可讀性。

如果所有 DAO 都包含通用方法,則可以在所有 DAO 上使用通用接口。例如,您有 10 個對象類型(表),并且每個 DAO 都有創(chuàng)建R讀取更新D刪除方法

您可以從 Spring Boot 框架中復(fù)制一些想法,其中此類 DAO 始終是每個對象類型一個,并且將類似的內(nèi)容合并到您的解決方案中:

https://docs.spring.io/spring-data/data-commons/docs/1.6.1.RELEASE/reference/html/repositories.html


查看完整回答
反對 回復(fù) 2022-06-23
  • 2 回答
  • 0 關(guān)注
  • 115 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號