database - 设计 : Business Logic or Data Storage on data manipulation during loads

标签 database architecture storage

我已将我的程序在数据存储和业务逻辑之间分离。

在我的数据库中,我有两个非常相似的表,一个存储已提交的更新(每个实体有许多条目),另一个条目是我正在处理的临时数据。

这意味着当我加载数据时,“正确”数据是临时数据或已提交数据的最新值。

我的问题是决定提供此信息是“数据存储”问题还是“业务逻辑”问题。

做魔鬼的拥护者,我最终得到以下 2 个声明。


数据存储问题

数据结构能够提供检索简单定义的数据请求的答案,数据存储是如何完成的。即使这是通过代码和数据负载的混合来完成的,也可以,只要请求是固定的并且有明确的答案。

因此,如何将临时信息与临时信息一起存储不应成为业务逻辑关注的问题,这意味着如果我稍后重构或重新设计数据结构,业务逻辑的请求不会改变。所以解决方案是从两种形式加载最新值并比较它们,并以定义的格式返回最新值


业务逻辑问题

决定哪些数据是最新的以及如何处理它不是数据问题,因此操作数据的代码应该放在业务逻辑中,可以通过包装器(在业务逻辑中)来避免重构太多代码以防万一数据存储的变化。因此,应该在业务逻辑端请求和比较这两个结果,让数据存储仅维护数据检索。


我非常倾向于将这个逻辑放在数据存储中,因为业务逻辑正在询问一个简单的信息并发送一个请求,由于其他问题,这被决定以特定的方式存储并且以后可能改变不应该影响业务逻辑部分。所以你的想法是什么。

您会将信息放在哪里,为什么要为此任务使用/避免使用业务逻辑/数据存储?

最佳答案

决定用两个表来保存永久数据和工作数据是一种数据存储方式,还有其他实现该概念的方法。理想情况下,您应该能够在无需更改业务逻辑的情况下更改数据操作基础。

因此,数据存储层应负责协调实现并提供一致的数据 View 。实现这一点的最佳方法是使用抽象,例如 View 或 API。选择最适合您的架构的方法。

关于database - 设计 : Business Logic or Data Storage on data manipulation during loads,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20030859/

相关文章:

java - Android SQLite 对表列的排序方式不同

MySQL-基于多列输出 "other"列

SQL:任何类型的联接都可以重写为一组 WHERE 条件吗?

android - 我如何结合使用 db4o 来存储数据和 Lucene 来索引数据以进行快速搜索?

haskell - 如何在递归结构中存储任意值或如何构建可扩展的软件架构?

Linux 存储空间已满..但是如何...?

testing - 运行 diskspd 时出错

c++ - Firebird 数据库的 IBPP 接口(interface)体验

php - 在PHP中根据对象属性值动态实现接口(interface)?

database - 如何将 BLOB 存储到 sqlite 数据库