温控器到DB,OOP设计

时间:2013-06-09 19:21:23

标签: java oop uml

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

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

我打算使用一个扩展数据库连接类的数据库接口类。此数据库接口将插入到DB中,数据库连接构造函数将创建数据库连接。

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

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

UML图:

uml diagram

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

感谢您的时间。

X。

1 个答案:

答案 0 :(得分:1)

首先,对于刚刚开始学习它/ OOP的人来说,它看起来非常棒!

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

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

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

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

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

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

编辑:可能的Controller构造函数:

// 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。