Questions tagged «persistence»

9
在敏捷开发中,我应该在数据库之前尝试在平面文件中进行持久化吗?
有人向我解释说,由于在敏捷开发中,策略和应用程序逻辑应该比持久性方法之类的细节更为重要,因此持久性决策应该在最后做出。因此,从简单的持久性(例如平面文件)开始可能是一个好主意,直​​到我们意识到该方法的弱点显而易见,然后才更改持久性(例如,使用关系数据库)。 这是真的吗?还是我误解了这个概念?这是敏捷团队通常如何构建应用程序吗?有什么理由?何时不应该采用这种方法?


2
坚持自然语言处理解析数据
我最近开始使用斯坦福大学的CoreNLP进行自然语言处理(NLP)的实验,并且想知道为文本挖掘应用程序之类的东西存储NLP解析数据的一些标准方法是什么? 我认为可能有趣的一种方法是将子级存储为邻接列表,并充分利用递归查询(Postgres支持此功能,我发现它确实很好用)。 但我认为,根据多年来从事该领域工作的人员所进行的分析类型,可能有许多标准方法可以执行此操作。那么NLP解析数据的标准持久性策略是什么?如何使用它们?

2
持久性无关对象能够实现延迟加载吗?
持久性无知是单责任原则的应用,这实际上意味着域对象(DO)不应该包含与持久性相关的代码,而应该只包含域逻辑。 a)我认为这意味着联系较低层(即持久层)的代码位于业务逻辑层的其他类(OC)中的域模型之外? B)如果我的假设下一个)是正确的,那么DO,说Customer,从来没有包含的方法如GetCustomers或GetCustomerByID? c)如果我在a)和b)下的假设是正确的,并且假设Customer域对象对其属性的某些属性使用了延迟加载,则在某个时候Customer,内部逻辑必须联系OC,而OC则会检索延迟的数据。但是,如果Customer需要联系OC来接收延迟的数据,那么我们真的不能说域对象不包含与持久性相关的逻辑吗? 谢谢 回复jkohlhepp 1)我假设OrderProvider并且CustomerProvider类包含在业务逻辑层中? 2)我从您的答复中得知,b)下的假设是正确的? 3) ...我将检查是否填充了一些私人订单字段或该字段是否为空。如果为空... 但是据我所知,只要域代码需要检查是否order填充了私有字段,如果没有,请联系OrderProvider,我们已经违反了PI原则?

2
是否首选Spring + Hibernate而不是EJB 3?
我的感觉是,每当新的JEE项目开始(适用这些技术的地方)时,人们就会喜欢使用Spring + Hibernate的组合而不是EJB 3。 似乎甚至建议初级程序员而不是EJB。 这是个人喜好还是有相关原因?(例如,由早期EJB版本造成的个人伤痕导致对EJB的不信任或技术膨胀与性能原因或学习曲线有关)?

2
域/持久性模型隔离通常会很尴尬吗?
我深入研究了域驱动设计(DDD)的概念,发现一些原则很奇怪,尤其是在域和持久性模型的隔离方面。这是我的基本理解: 应用程序层(提供功能集)上的服务从其执行功能所需的存储库中请求域对象。 该存储库的具体实现从为其实现的存储中获取数据 该服务告诉封装业务逻辑的域对象执行某些修改其状态的任务。 该服务告诉存储库保留修改后的域对象。 存储库需要将域对象映射回存储中的相应表示形式。 现在,鉴于以上假设,以下内容似乎很尴尬: 广告2: 域模型似乎加载了整个域对象(包括所有字段和引用),即使请求它的功能不需要它们。如果引用了其他域对象,则甚至可能根本无法完全加载,除非您同时加载这些域对象以及它们依次引用的所有对象,依此类推。想到了延迟加载,但是这意味着您开始查询域对象,这首先应该是存储库的责任。 鉴于此问题,加载域对象的“正确”方式似乎具有针对每种用例的专用加载功能。这些专用功能将仅加载其设计用例所需的数据。尴尬在这里发挥了作用:首先,我必须为存储库的每个实现维护大量的加载函数,并且域对象最终将null以其字段中携带的不完整状态结束。从技术上讲,后者应该不是问题,因为如果未加载值,则无论如何要求它的功能都不应要求该值。仍然很尴尬和潜在的危害。 广告3 .: 如果没有存储库的任何概念,领域对象将如何验证唯一性对构造的约束?例如,如果我想创建一个User具有唯一社会保险号(已给出)的新保险,则只有在数据库中定义了唯一性约束的情况下,最早的冲突将在要求存储库保存对象时发生。否则,User在创建新的社会保障之前,我可以寻找具有给定社会保障的a并报告错误(如果存在)。但是,约束检查将存在于服务中,而不存在于它们所属的域对象中。我刚刚意识到,域对象被很好地允许使用(注入)存储库进行验证。 广告5: 与让域对象直接修改底层数据相比,我认为将域对象映射到存储后端是一项工作量很大的过程。当然,将具体的存储实现与域代码脱钩是必不可少的前提。但是,确实付出了这么高的代价吗? 您显然可以选择使用ORM工具为您执行映射。这些通常需要您根据ORM的限制来设计域模型,或者甚至引入从域到基础结构层的依赖关系(例如,通过在域对象中使用ORM批注)。我也读过ORM引入了大量的计算开销。 对于NoSQL数据库(几乎不存在任何类似于ORM的概念),您如何跟踪域模型中的哪些属性发生了变化save()? 编辑:另外,为了使存储库访问域对象的状态(即每个字段的值),域对象需要显示其内部状态,这会破坏封装。 一般来说: 交易逻辑将流向何方?这当然是持久性特定的。一些存储基础架构甚至可能根本不支持事务(例如内存中的模拟存储库)。 对于修改多个对象的批量操作,我是否必须分别加载,修改和存储每个对象才能通过对象的封装验证逻辑?这与直接对数据库执行单个查询相反。 我希望对此主题进行一些澄清。我的假设正确吗?如果没有,解决这些问题的正确方法是什么?

2
我应该在服务和存储库之间使用一个层来构建干净的架构-Spring
我正在架构中,它将为Web客户端和移动应用程序提供rest api。我正在使用Spring(spring mvc,spring data jpa,... etc)。域模型使用JPA规范编码。 我正在尝试应用干净架构的一些概念(https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html)。并非全部,因为我将保留jpa域模型。 通过各层的实际流量是这样的: 前端 <-> API服务 -> 服务 -> 存储库 -> 数据库 前端:Web客户端,移动应用 API服务:Rest控制器,在这里我使用转换器和dto并调用服务 服务:与实现的接口,并且包含业务逻辑 存储库:具有自动实现的存储库接口(由spring data jpa完成),它包含CRUD操作以及一些sql查询 我的疑问:我应该在服务和存储库之间使用额外的一层吗? 我正在计划这个新流程: 前端 <-> API服务 -> 服务 -> 持久性 -> 存储库 -> 数据库 为什么要使用这个持久层?正如它在干净的体系结构文章中所说的,我希望有一个访问不可知的持久层的服务实现(业务逻辑或用例)。如果我决定使用其他“数据访问”模式,例如,如果我决定停止使用存储库,则不需要更改。 class ProductServiceImpl implements ProductService { ProductRepository productRepository; void save(Product product) { // do …

2
Ruby on Rails保存图像的方式是什么?
我在iOS上进行开发,并且从PHP后端切换到Ruby on Rails。交换格式为JSON。 Google快速搜索“将图像保存在Rails中”后,几乎所有结果都涉及将图像数据作为blob保存到数据库。我可能会弄错了,但我的印象是,将图像数据保存在数据库中会浪费大量的时间和空间(与保存指向文件位置的链接相反('/img/subcat/4656.png') 。 在PHP中,接收数据,生成文件名,将该文件保存到磁盘以及使用映像在磁盘上的位置更新数据库是相当标准的。Ruby on Rails是否相同,还是我不知道某些内置的ActiveRecord图像功能?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.