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

我正在尝试正确执行此操作,因此提出了有关类/对象以及它们如何交互的基本UML图。

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

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

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

UML图:



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

感谢您的时间。

X。

最佳答案

首先,对于刚刚“开始学习它/ 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。

07-24 19:13