面向对象的小型到中型SQL数据库设计

作为一个个人项目,我想在Kotlin做一个“预算管理”应用程序,用户可以在其中输入价格和数量等各种项目和描述符。 我想将数据存储在H2数据库中,然后使用预定义的函数进行过滤和查看数据。

例如,如果用户想要知道他们在两个日期之间花了多少钱,或者他们的总支出在两个日期之间增加或减少了多少百分比,或者他们在用户定义的目标(例如储蓄账户)上的进展如何。

这是我的Github项目。

我正在使用SQL“Kotlin Exposed”API。 例如,这是我的“基本”表:

package tables import org.jetbrains.exposed.sql.Column import org.jetbrains.exposed.sql.Table object Essential : Table() { val id: Column = Essential.integer("id").autoIncrement().primaryKey() val name: Column = Essential.varchar("name", length = 25) val desc: Column = Essential.varchar("description", length = 50) val price: Column = Essential.varchar("price", length = 9) val quant: Column = Essential.varchar("quantity", length = 25) } 

我在面向对象设计方面遇到了一些麻烦。 假设你有一个名为“Essential”的表格,在这个表格中你存储了你最需要的东西,比如食物等,我为它设计了一个界面:

 package dao interface EssentialDao { val id: Int val name: String val price: String val quant: String val desc: String fun essentialMenu(option: Int) } 

然后我在一个单独的类中实现DAO:

 package daoimpl import dao.EssentialDao data class EssentialDaoImpl( override val id: Int, override val name: String = "", override val price: String = "", override val quant: String = "", override val desc: String = "") : EssentialDao { override fun essentialMenu(option: Int) { when(option) { 0 -> { println("Quit") // exit } 1 -> { println("Insert") // insert menu } 2 -> { println("Delete") // delete menu } 3 -> { println("View") // view menu } else -> println("Invalid") } } } 

然后,在Main类中,我可以调用接口并使用用户指定的数据。

这是很好的面向对象设计吗? 是否有意义? 我读过关于“数据访问对象”,我想这是我如何使用它们。 这个项目可能不会很大。