我之前已经解决过这个问题,我的解决方案如下:
1.从Vector继承(根据你所使用的语言),选择以下结构(它存储了所有具有标准类的行):
ID(对于标识你的选择非常有用)
Select的所有元素是一个在Vector类中的子项,其中包含了所有的行。
rowNumber: int
columnNumber: int
usedFilter: String
usedGroupBy: String
usedHavingClause: String
usedOrderBy: String
tableName: String
getID()
getRowNumber(): int
getColumnNumber(): int
getUsedFilter(): String
getUsedGroupBy(): String
getUsedHavingClause(): String
getUsedOrderBy(): String
getTableName(): String
Select(tableName: String, filter:String, groupBy: String, havingCaluse: String, orderBy: String, columns: Vector)
2.我有一个与数据库直接通信的类,称为DataAccessLayer。让我们看看这个类的结构:
DataAccessLayer
connect(...): boolean
disconnect(...): boolean
use(databaseName: String): boolean
selectedData: Vector(实际上这是一组Select的集合)
createSelect(tableName: String, filter: String, groupBy: String, havingCaluse: String, orderBy: String, columns: Vector):boolean(以确定是否成功)
deleteSelect(ID):boolean
insert(tableName: String, columns: Vector, values: Vector):boolean
update(tableName: String, columnsToSet: Vector, values: Vector, filter:String):boolean
delete(tableName: String, filter: String):int(删除了多少行,-1表示发生异常,或者只是简单地将异常抛到更高的层次)
//创建/删除表/视图/数据库/约束也可以实现,我只是太懒了,因为我相信你已经理解了这个想法。
DataAccessLayer()
在前两个步骤发生之后,你可以使用这两个类处理任何数据库查询(实际上Select的功能也可以放入DataAccessLayer中,使这两个类成为一个类,但这样更加优雅),但是,你可能需要为一些表处理一些额外的东西。解决方案很简单,当你发现用这些方法难以处理某个表时,你只需从DataAccessLayer继承并重新定义你想要重新定义的内容,所以在DataAccessLayer中,你应该只使用protected和public修饰符,并忘记private修饰符。因此,它们之间的关系如下:
Select 1 < - > n DataAccessLayer
ClassInheritedFromDataAccessLayer extends DataAccessLayer
前端使用从数据访问层继承的类1,...,从数据访问层继承的类n,数据访问层。
这样你的项目将会:
- 可管理
- 有序
- 易于计划
- 易于实现
- 易于修改
- 容易被其他人理解
希望这能帮到你,
祝好。