- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们的 SOA WCF 系统中有一个数据访问服务。该服务负责对“系统范围”的数据库表执行 CRUD(创建、更新、删除)操作,同时也是查询数据的来源。系统中的任何其他服务想要访问 DAS 控制下的表都必须到 DAS 获取或修改它。我们使用 Entity Framework 并为此 DAS 构建了我们自己的 POCO 状态跟踪系统。
我们的数据库中还有其他表属于单个服务,并且存储数据仅供自己使用,即当它们崩溃和恢复或记录业务信息时它们可以访问的状态信息。我们有一条规则,任何一张表都不能被多个服务访问:因此多个服务所需的数据最终会存储在 DAS 中。
事实是我从来没有真正理解为什么数据访问服务是一个好主意,而不是直接访问表。它似乎更慢,我们的 DAS 不是事务性的,因为它无法发回用于数据库更新的 POCO 图(一次只有一个 POCOS),而且我们还遇到问题,DAS 实际上是另一个需要数据的服务的客户端从它...循环依赖。
为什么要打扰DAS?对于 SOA,为什么 DAS 如此重要?我在这里想念什么?单点控制?
并非所有表都是 DAS 的一部分并且某些服务有自己的“私有(private)”表,这也是 SOA 设计缺陷吗?
欢迎对此进行任何讨论。
最佳答案
您认为这是做事的正确方法是正确的,而且您也正确地认为它会减慢速度并且有时会很麻烦。 SOA 必然会牺牲一些效率来换取确保与服务相关的所有数据的单一控制点。事实上,即使是拥有“通用 DAS”服务的想法在一些 SOA 圈子里也有点臭。
通过将所有 CRUD 操作集中到 SOA 应用程序中的一项服务,您可以确保数据完整性以及正确执行业务规则。举个例子,考虑一个你想存储的实体,它有一些与之相关的业务规则,从纯 SQL 的角度来看很难接近 - 例如,假设一个存储文件引用的表,并创建/更新确保这些文件存在的服务。
使用 SOA 和对这些表的单一访问点,您可以将逻辑编码到创建/更新方法中,并合理地确保您从服务接收的数据是有效的 - 即引用的文件存在。如果有人能够写入这些表或从中检索数据,则不存在这样的保证 - 即使您自己调用服务,您也不知道其他程序员出于恶意或只是计划健忘而忘记实现关键的业务规则。这导致了防御性编程,其中每一位客户端代码都独立地确保业务逻辑,最终导致散布在整个应用程序中的业务逻辑错综复杂。
另一个好处是可扩展性和可维护性。假设您的一项服务正在访问大量数据。使用 SOA,一切都是“黑盒”的,因此您的客户端代码对最终如何获取数据没有太多了解。您可以更改您的 RDBMS、分区表或实现缓存,并使调用它的客户端代码对所有这些都不可见 - 确保您只需在一个地方进行痛苦的更新。由于数据库代码分散在您的应用程序中,这种升级变得非常痛苦。
关于WCF SOA : CRUD Data Access Service. ..为什么要麻烦(或者我们的设计错误)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2363540/
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 9 年前。 Improv
我刚刚发现了这门语言,我想知道是否可以使用数据库制作基本的 CRUD 网络应用程序。 最佳答案 有 mysql 的库和 postgresql , 核心库提供了一个 web server支持 HTTP、
Symfony 4.0 发布后,不再支持 SensioGeneratorBundle .因此命令 php app/console generate:doctrine:crud不可用。 他们建议使用 M
在开发 Web 应用程序时,我通常会看到人们执行增删改查和同步 View 的两种方式。 这里是使用 ajax 的高级示例。 1-方法一 创建操作可能涉及 POST 请求,成功后只需执行另一个 GET
我已经成功地使用 Yii2 模型和 CRUD 生成器为我的网络应用程序获取了一些框架代码文件。特别是,CRUD Generator 声称已成功将其 View 文件创建到: /basic/views//
在我的项目中,我一直在使用 Django 的通用 CRUD View 来处理很多事情。我现在想开始迁移到 DJango 1.3 中基于类的新样式通用 CRUD View 。我没有发现这些文档有多大帮助
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题?通过 editing this post 添加详细信息并澄清问题. 7年前关闭。 Improve this
我希望标题不要太含糊,所以这里是: 我创建了一个 MySQL 数据库,其中存储了两个表:一个包含输入数据,另一个包含输出数据。 之后我编写了一个程序,连接到这个特定的数据库,从输入表中提取数据,解析它
我需要编辑我的实体以获得更多值。我已经用我之前的值生成了 crud。如何在编辑实体后通过应用程序/控制台重新生成 crud,以便它自动为其他值生成函数。 最佳答案 为此,您需要删除为此 crud 生成
因此,我仅使用 JavaScript 创建了一个简单的 CRUD 应用程序。现在,您可以将国家/地区添加到数组中并从数组中删除国家/地区。我希望能够编辑数组中的现有国家/地区,例如我想将“斯德哥尔摩”
我想让java中的一个类有一个可以与Hibernate配置交互并执行某些操作的方法,该方法被标识为ENUM(例如:读取,更新,添加,删除等) 方法参数应为(枚举操作、类 DTO、NamedQuery
我正在构建一个 React 应用程序,并使用 auth0 来登录/验证用户。 在使用 auth0 之前,我一直在对 API 进行 CRUD 调用来发布帖子。这又是在使用 auth0 之前、在我拥有用户
尝试使用 BlueJ 构建我的第一个 Java MySQL CRUD 应用程序。我可以运行该应用程序并将数据写入 MySQL 数据库。但是,当我运行搜索函数时,我得到了 Java .NullPoint
我正在试用 Microsoft Master Data Services,我想以编程方式将数据添加到数据库中。我开始获得模型/实体/成员结构,但我还不确定。如果您对此结构有很好的解释,请分享。 假设有
我正在尝试开发一个 Backbone Marionette 应用程序,我需要知道如何以最佳方式执行 CRUD(创建、读取、更新和销毁)操作。我找不到任何解释这一点的资源(仅适用于 Backbone)。
我已经根据文档和 medium article 模拟了与 Room 的多对多关系。 .使用这个@Relation,我可以从数据库中检索RecipeWithIngredients 或Ingredient
Closed. This question is opinion-based。它当前不接受答案。 想要改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。 3年前关闭。
通过AngularJS通过REST进行CRUD操作的最佳实践是什么? 特别是这里的 Angular-Way 。我的意思是使用最少代码和最默认 Angular 设置来达到此目的的方式。 我知道$ res
我无法弄清楚我的更新功能。我能够从数据库中检索和删除,但我不知道如何更新。这对我来说是全新的,所以我很困惑。 .js 文件 //update user $("#btnUpdateUser").clic
我正在寻找一种对用户透明的 CRUD 操作后重新加载页面的方法。 实际上,在创建或删除之后,我必须重新加载页面才能显示我的操作。 我使用 api 来实现这个,当我将它与 json 文件一起使用时,它工
我是一名优秀的程序员,十分优秀!