您好,登录后才能下订单哦!
本篇内容介绍了“怎么理解ObjectiveSql的面向对象”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
最近看了一些视频,是关于“充血模型”和“贫血模型”,还有ActiveRecord 模式等,如果站在更高的角度去理解,“贫血模型”就是C语言中的"struct",而充血模型就是Java 中的Class,到底是"struct" 还是Class 要站在系统不同位置去理解,两者都有存在的理由,只是“贫血模型”会隐式的存在。我的理解是“贫血模型”通常存在于数据传输,它只是一种传输协议定义,可以用在不同子系统或数据库之间的数据传递,当然“贫血模型”也不仅仅只有set 和get 方法,它应封装协议相关的行为(通常这些行为被封装在其它控制Class 中),Google 的ProtoBuffer 就是一个很好的实践。而“充血模型”和ActiveRecord,则是人为的一种定义,本质上它只是面向对象设计中基础的概念(状态和行为的封装),纯属制造概念。
面向对象的话题很大,我就以我项目中实际的问题简单介绍。
@DomainModel public class Order { private String no; private Integer memberId; private Float amount; private Float quantity; @Column(transition = SqlDateTimeTransitional.class) private Timestamp salesAt; @Relation(relationType = RelationType.BELONGS_TO) private Member member; @Relation(relationType = RelationType.HAS_MANY) private List<OrderLine> orderLines; @Transactional @DataSourceName("test") public static void makeOrder(Order order, OrderLine... orderLines) throws SQLException { Order.create(order, false); OrderLine.create(orderLines, false); } }
DomainModel 在项目中以Annotation 的形式存在,用于标识一个Class 是否为应用系统中的一个模型,模型中应该包括业务的状态和逻辑,同时也应描述描述该模型与其它模型的关系,具体解释如下:
@DomainModel 会将该模型的状态与数据库中的表进行关联
@Column(transition = SqlDateTimeTransitional.class) 定义该字段与数据库之间的转换方式
@Relation(relationType = RelationType.BELONGS_TO) 定义Order 与Member 的关系
@Transactional 标识该方法的数据操作会作为事务的形式提交
@DataSourceName("test") 用于多数据源时指定该方法中的数据所属的数据库
Order 模型你可以称为ActiveRecord,也可以称为充血模型,但本质上它就是一个Java 的标准Class,符合面向对象设计的一般原则,将问题域细分,再封装,它只是将问题域中“订单”进行抽象,设计状态和行为,将问题域缩小至原子粒度,从业务逻辑概念进行推演不会产生歧义,使代码能够清晰描述逻辑和状态,将纯技术型代码分离,上述定义完成后,你可以这样直接使用:
Member member = Member.queryByPrimaryKey(1);
List<Member> members = Member.query("id between ? and ?", 10, 20);
int count = Member.count("id > ?", 10);
“怎么理解ObjectiveSql的面向对象”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。