CRUD

CRUD

CRUD 是最简单也是最经典的架构,命令(Command,通常用来更新数据,操作 DB)和查询(Query)通常使用的是在数据访问层中 Repository 中的实体对象(这些对象是对 DB 中表的映射),这些实体有可能是数据库中的一行数据或者多个表。

通常对 DB 执行的增,删,改,查(CRUD)都是针对的系统的实体对象。如通过数据访问层获取数据,然后通过数据传输对象 DTO 传给表现层。或者,用户需要更新数据,通过 DTO 对象将数据传给 Model,然后通过数据访问层写回数据库,系统中的所有交互都是和数据查询和存储有关,可以认为是数据驱动(Data-Driven)的。对于一些比较简单的系统,使用这种 CRUD 的设计方式能够满足要求。

CRUD 的缺陷

  • 使用同一个对象实体来进行数据库读写可能会太粗糙,大多数情况下,比如编辑的时候可能只需要更新个别字段,但是却需要将整个对象都穿进去,有些字段其实是不需要更新的。在查询的时候在表现层可能只需要个别字段,但是需要查询和返回整个实体对象。

  • 使用同一实体对象对同一数据进行读写操作的时候,可能会遇到资源竞争的情况,经常要处理的锁的问题,在写入数据的时候,需要加锁。读取数据的时候需要判断是否允许脏读。这样使得系统的逻辑性和复杂性增加,并且会对系统吞吐量的增长会产生影响。

  • 同步的,直接与数据库进行交互在大数据量同时访问的情况下可能会影响性能和响应性,并且可能会产生性能瓶颈。

  • 由于同一实体对象都会在读写操作中用到,所以对于安全和权限的管理会变得比较复杂。