model这块目前是充血模型,里面的内容可以分为几个部分
map对象的提升方法。
model自己属性的实例方法:比如set、keep、put、remove等。
model取数据库配置的方法:getTable,config等。
model数据库操作相关的:crud*(base+cache+sqlpara)
每个对象该有的:toString、toJson、equals、hashcode等
这些部分的设计中关于数据库操作的部分,我认为设计成静态方法会比较好,毕竟一个model从业务上来说一般只对应一套数据库的配置,而数据库操作相关的方法除了需要数据库配置信息外,并需要其它实例变量。
这么做的好处就是把与对象实例无关的数据库操作作为静态方法,不用在service、或者controller中实例化dao对象,有效的减少多余的实例化对象,进而降低运行时的内存需求。
PS:club项目中,每个service会去实例化自己需要的dao,这个实例化是通过new来做的,这样就会存在多个service中,需要同一个dao,这个dao在系统中就会存在多份,但本身dao就是纯上下文无关的方法操作,多份是没有意义的。所以我现在还是在model里面定义dao对象,然后service里面直接用。
1、为什么要实例化是为了确保线程安全,java是本身就一门多线程语言。
2、如果只考虑单数据库配置这块就有些片面了,因为现实项目中有一些项目是多数据源的,且也可能是不同库配置,所以在构建一个框架时,这些基本情景是必须要周全考虑的。
3、再说用new创建实例关于性能问题其实可以基本忽略不计,这的话题印象曾经在osc上看到其他的兄弟讨论过,波总也亲自在上解答过,蛮久的了你去你翻翻看。
4、club他实例的dao你追踪到底层你就会看到其实他是个静态实例对象,关于静态变量在初始实例么后,他从系统生命周期到结束在内存中始终保存一份。
5、为什么在每个service上都会实例自己需要的dao这么做的目的是便于代码重构,提供依据,家都知道当大型项目中随着时间、需要、人员更变,项目中的代码、功能模块变得异常的庞大时你就会发现,设计之初不做一些习惯上的改变,当后期代码进行重构是件非常痛苦的事情。