
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
存储功能的应用在软件开发项目中是非常常见的一个编程开发功能,而本文我们就通过案例分析来了解一下,软件开发存储功能应用问题分析。
无论是面向集合还是面向持久化,都要求我们以集合的方式来使用仓储——这也正是仓储和数据访问对象DAO不同之处。仓储是面向领域对象的,它的职责是将领域对象(聚合)持久化到基础设施中,以及从基础设施中获取数据并还原成领域对象返回。DAO是面向数据表的,一般和数据表一一对应,并自带CRUD方法——和集合的add、remove方法不同,DAO的CRUD对应的是数据库的CRUD操作的。
我们可以恰如其名地理解“仓储”。它是一个仓库,我们将货物交给仓库管理员,由仓库保管,至于怎样保管是仓库内部的事了。另外我们根据货物编号(以及其他过滤条件)向仓库管理员索要指定的货物,至于怎样将货物从仓库中取出是仓库内部的事,仓库可以自己决定如何保管货物(如为了节约空间可能会将货物拆卸分类存放),但仓库必须保证取出来的货物和当时放进去的是一模一样的(除非不可抗原因如过期了)。
我们现在的仓储使用面临一些问题。大的问题是仓储中包含了大量的业务逻辑——这也正是面向数据库编程所导致的结果,我们的思维直接和数据库打交道,而仓储无疑是我们所编写的离数据库近的东西了。我们程序中并没有领域对象(实体),因而和仓储打交道的是毫无业务含义的数组。
如果仓储本身包含了大量业务逻辑,还不如使用传统的(也是主流框架自带的)Model,至少它有“模型”的概念(虽然是面向数据表的),而此处的仓储则是“四不像”。
目前的仓储使用的另一个严重问题是在仓储中实现事务。从仓储的描述来看,它只是担任存与取的职责,何以跟事务挂钩?这还是由面向数据库编程的思维导致的。当提及事务,我们先想到的是关系型数据库中的事务,并且理所当然地认为此事务即彼事务,那么既然是数据库的东西,当然要放到仓储层了。
什么是事务?事务是指需保证一项任务的原子性,任务中的各项操作要么全部成功,要么全部失败(撤销掉)。事务本身和数据库没半毛钱关系。我们说银行转账业务需具有事务性,我们指的是这项业务,而不是业务背后的存储技术。数据库层面的事务是将“事务”这个概念应用到数据库这个具体领域而言的,具体说来是事务中的一系列写操作要么全部成功,要么全部失败。我们真正需要关注的显然是业务层的事务性,业务层不具有事务性了,存储层的事务又有何意义?数据库事务是对业务事务的低层技术支撑,改天我们不用关系型数据库了,难道业务就不能有事务性了?
仓储和实体的操作都是细粒度的,无法保证整体的事务性,也不应当知晓事务的存在。
事务应当放在那个能代表单一完整任务的方法中(如应用服务中)。
将事务放在仓储层,不可避免地会将业务逻辑带入仓储中。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。