温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么理解ObjectiveSql的面向对象

发布时间:2021-12-30 16:49:32 来源:亿速云 阅读:178 作者:iii 栏目:大数据

本篇内容介绍了“怎么理解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 是否为应用系统中的一个模型,模型中应该包括业务的状态和逻辑,同时也应描述描述该模型与其它模型的关系,具体解释如下:

  1. @DomainModel 会将该模型的状态与数据库中的表进行关联

  2. @Column(transition = SqlDateTimeTransitional.class) 定义该字段与数据库之间的转换方式

  3. @Relation(relationType = RelationType.BELONGS_TO) 定义Order 与Member 的关系

  4. @Transactional 标识该方法的数据操作会作为事务的形式提交

  5. @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的面向对象”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI