大家讲道理2017-04-18 09:29:17
终于可以来吐槽一下了,对于已经长时间不再使用 ORM
的人来表达一下我的看法。ORM
的人来表达一下我的看法。
经常看到写 Java
后端的人,写了一大堆模型对象,各种继承和组合都用上了,如 @chanjarster 所说的,一对一,一对多,多对多,单项双向的,直接绕晕了...
其实个人觉得 ORM
是一个很糟糕的发明,ORM 唯一的好处就是不用考虑 SQL
,简直哭晕,SQL
是一个多么好的东西,现在对于大部分的 Java
程序员来说,写个 SQL
应该不是大问题,比在这里去背各种对象映射规则简单多了...
总结一下ORM
的缺点
性能不高,即使有成熟的框架,有的时候我只要访问一个属性,还是装载了整个对象的数据。(PS:可能可以配置,那学习成本也很高)
不够灵活,很多业务需求,都是需要连表查,调用函数,存储过程...
抽象太麻烦,直接绕晕了
综上,如果你认可的话,那就放弃 ORM
吧
替代方案:
使用 MyBaits
直接写 SQL
,灵活控制
使用 NOSQL
数据库,把对象转换为 JSON
数据,可以直接存储,如 MongoDb
Java
后端的人,写了一大堆模型对象,各种继承和组合都用上了,如 @chanjarster 所说的,一对一,一对多,多对多,单项双向的,直接绕晕了...ORM
是一个很糟糕的发明,ORM 唯一的好处就是不用考虑 SQL
,简直哭晕,SQL
是一个多么好的东西,现在对于大部分的 Java
程序员来说,写个 SQL
应该不是大问题,比在这里去背各种对象映射规则简单多了...🎜
🎜总结一下ORM
的缺点🎜
ORM
吧🎜
🎜替代方案:🎜
MyBaits
直接写 SQL
,灵活控制🎜🎜
NOSQL
数据库,把对象转换为 JSON
数据,可以直接存储,如 MongoDb
🎜🎜
🎜大家讲道理2017-04-18 09:29:17
你这个问题好大,简单来说就是搞清楚Model和Model之间的关系,有三个维度
“引用关系”还是“拥有关系”。如果A拥有B,那么A删除的时候B也要跟着删除。如果A引用B,那么A删除了B不用跟着删除。这个根据业务来判断。
单项还是双向。这个根据业务来,你自己判断,不过要记住一点,在“引用关系”下,尽量保持单向。在“拥有关系”下,双向是可以的。
一对一、一对多、多对一、多对多。这个不多讲了,不过有一点要注意,尽量避免多对多,如果用了多对多多问问自己是否一定要这么干。
如果一定要问有什么方法论,可以看看DDD(Domain Driven Design)里的聚合根(Aggregate Root)概念。