0

我正在尝试我的第一个 Java 项目(刚开始学习它/OOP)。我已经构建了一个恒温器电路,我可以使用驱动程序获取温度,现在正在设计一个与恒温器接口并将数据插入 mysql DB 的 Java 程序。

我正在尝试正确地做到这一点,因此提出了我的类/对象以及它们如何交互的基本 UML 图。

我计划使用将扩展数据库连接类的数据库接口类。该数据库接口将插入数据库,数据库连接构造函数将创建数据库连接。

我还将有一个恒温器类,它与恒温器本身接口,它将有 2 个私有变量,温度和湿度。它将具有方法 update temp,该方法将更新私有变量。get temp 方法将为这些私有变量提供接口。

最后控制类由恒温器和数据库接口类组成,调用这两个类的方法将温湿度数据存入数据库。

UML图:

uml图

你有什么想法吗?我不知道这个设计有多好。控制器是否以正确的方式与其他类交互?

感谢您的时间。

X。

4

1 回答 1

1

首先,对于刚刚“开始学习它/OOP”的人来说,它看起来不错!

像我一样跳出来的一件事:它有效,但似乎惯用错误(我们通常不这样做)是让您的 DAO(数据访问对象,“数据库接口”)扩展创建连接的类。相反,应该使用这个类——或者更好的是,这个类的结果,一个连接。

为什么?当您编写更多 DAO 类(在这个项目或其他项目中)时,您可能会发现这是两个不同的问题:

(1) 处理温度/湿度表和相关 SQL 以及温度特定逻辑和异常的代码。

(2) 负责连接数据库和创建连接对象的代码。

如果你有一个 databaseInterface.setConnection(Connection c) 方法,你会发现你的 databaseInterface 类更可重用。您可以设置来自各种来源的连接,创建具有不同连接的多个实例,在测试用例中注入模拟连接等。

这些是我多年来学到的想法,通常适用于具有数十到数百个数据访问类的项目。它在一个小项目中并不是非常重要,但仍然是一个可能的改进。

编辑:可能的控制器构造函数:

// My hardware interface
private Thermostat thermostat;

// My temperature DB tables interface
private TemperatureDAO temperatureDAO;

public Controller() {
    thermostat = new Thermostat();
    temperatureDAO = new TemperatureDAO();     
    // As the controller, I get to decide what connection the application uses.
    temperatureDAO.setConnection(new ConnectionProvider().getConnection());
}

在此代码中,控制器决定使用哪个 DB 连接,而不是每个单独的 DAO。

于 2013-06-09T19:52:17.630 回答