为了账号安全,请及时绑定邮箱和手机立即绑定

一百个静态方法的DataDAO类,如何重构

一百个静态方法的DataDAO类,如何重构

梦里花落0921 2022-06-23 20:09:12
我有一个 DataDAO 类,我的 Servlet 用于对几种对象类型进行 CRUD 操作。当我刚开始时,我只与这门课做一些事情,所以看起来还可以。但是现在项目越来越大,我添加的每个功能都必须为这个类添加一个新方法,所以我现在有大量的静态方法。看来我应该如何重构它,但不确定如何重构。有我可以使用的设计模式吗?或者有人可以解释为什么我应该或不应该担心它吗?我这样做只是为了学习,所以请不要告诉我使用一些简单的框架,我想尽可能细致地使用 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;    }}我的应用程序基本上是一种创建“抽认卡”来学习的方法。我试图创建一个接口“DataDAO”,然后让每个不同对象的子类实现该接口。但是有些操作与界面并不完全一致,而且似乎有很多不必要的工作。为什么这是一个好或不好的方法?
查看完整描述

2 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

你的类名DataDAO本身就暗示设计中有问题。更好地为不同的对象类型使用单独的 DAO 类。例如CardDAOUserAccountDAO等等。

你为什么要做这个方法static?我看不出有什么原因。我认为方法签名可能是这样的:

public List<Card> getCardsForUser(String userId)

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

由于您是学习者,因此我还将提及以下几点:

避免在同一范围内使用多个名称相似的变量。你有usersCardscardsForUser在你的代码中。这可能会令人困惑。对于ResultSet,您可以使用resultSet或之类的名称rs

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


查看完整回答
反对 回复 2022-06-23
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

这种情况下的最佳实践是为每种对象类型创建 DAO 类。

将所有内容放在全局类中的负面影响是复杂性、可测试性和可读性。

如果所有 DAO 都包含通用方法,则可以在所有 DAO 上使用通用接口。例如,您有 10 个对象类型(表),并且每个 DAO 都有创建R读取更新D删除方法

您可以从 Spring Boot 框架中复制一些想法,其中此类 DAO 始终是每个对象类型一个,并且将类似的内容合并到您的解决方案中:

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


查看完整回答
反对 回复 2022-06-23
  • 2 回答
  • 0 关注
  • 82 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信