Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何与另一个有限制的上下文w/o REST保持联系?

如何与另一个有限制的上下文w/o REST保持联系?
EN

Software Engineering用户
提问于 2018-07-26 00:45:14
回答 2查看 2.1K关注 0票数 4

问题

  • 如果我必须从另一个有界的上下文中获取一个实体,以便将它映射到这个有界上下文中的某个东西,我将如何去做呢?
  • 我是否调用了外部有界上下文的应用层?也许我需要一个新的“查询”应用层来进行这样的查询?
  • 我是否称之为外部有界上下文的存储库?
  • 我是否直接调用外部有界上下文的域模型?

Domain模型(请注意两个独立的有界上下文):

  • CustomerContext.Customer -这是完整的客户模型。
  • ConsentContext.Person -- CustomerContext.Customer的多个实例的缩小、重转换版本.指导此转换的规则驻留在ConsentContext.Person中。Person从不直接引用·Customer``,这里没有依赖项。
  • 请注意:这两个实体绝对属于独立的有界上下文。客户是企业日常工作的基础。由于法律和商业要求,同意人有很大的转变,而且结构完全不同。客户只是一个数据源,所以Person可以使用内部业务逻辑来创建自己。

Application层

  • ConsentContext.ApplicationService -实现用例。作为这些用例的一部分,它通过一些ConsentContext.Person获取PersonRepository

Repos

  • ConsentContext.PersonRepository必须与CustomerContext取得联系,检索CustomerContext.Customer并映射到新的人。这就是我要说的话--我从这里开始叫什么?CustomerContext's应用层?CustomerContext's存储库?CustomerContextD37域模型?

其他

  • 这两个有界的上下文运行在同一个进程中,我不使用REST。
  • 我的目标是客户/供应商关系。
EN

回答 2

Software Engineering用户

回答已采纳

发布于 2018-07-28 02:14:53

我将回避关于是否真的存在两个有界上下文的讨论,并讨论它们如何共享数据的问题。然而,在这样做之前,我必须指出,在同一个过程中有两个有界的上下文,这对自己是有害的。从微软的定义

有界上下文是自主的组件,有它们自己的域模型和自己的无处不在的语言。它们在运行时不应该相互依赖,并且应该能够在隔离状态下运行。但是,它们是同一个整体系统的一部分,确实需要相互交换数据。

有界上下文的一个很大的优点是它们彼此独立。如果其中一个倒下,另一个应该能够生存并能够继续运作。如果应用程序比预期更受欢迎,这也有助于实现可伸缩性,允许在不同的服务器上部署。

注意,两个进程空间并不意味着两个服务器。它们可以共享相同的硬件,但它们之间应该尽可能少耦合,这意味着代码中没有耦合。

关于耦合的想法,我们从Eric Evans那里得到了这个

有界上下文之间的代码重用是一个需要避免的危险。

上述所有选项都违反了本指南。

因此,您的问题与Microsoft定义的有界上下文的最后一句有关。这些是你的选择,按优先顺序排列

每个上下文都可以从其他上下文中缓存需要的信息。这是通过所有上下文共享的事件队列或消息队列完成的,当重要的聚合发生变化时,它们会通知其他感兴趣的上下文。朱莉·勒曼( Julie )对此进行了很好的讨论,这里。如果您想坚持使用单个硬件,消息队列也可以在该硬件上运行,尽管这会带来一些可伸缩性和持久性问题。

第二个选项是添加一个API。我知道您说您没有API,但是API可以作为上下文的一部分来部署,所以它们很少是额外的工作。还可以使用CORS规则将它们锁定为只接受来自本地主机的请求。

第三个选项是共享数据库,但是现在我们将上下文耦合起来,因此这是一条危险的道路。如果必须这样做,那么至少要将表放在单独的模式中,这样开发人员才知道他们正在打破上下文之间的隔阂。

我会避免你列出的所有三个选项。不难想象,在一种与另一种环境中的规则发生冲突的情况下,需求会发生变化。毕竟,这就是为什么首先将它们分成不同的上下文。

票数 6
EN

Software Engineering用户

发布于 2018-07-26 01:10:00

如果Customer是Person的数据源,那么拥有一个PersonRepository引用客户和一个CustomerRepository就可以了。

这不会破坏有界上下文,因为PersonRepository是一个服务,而不是实体/域对象。

PersonRepository应该包含转换规则,而不是Person

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/375913

复制
相关文章
Webpack 加载模块的规则
路径以 . 或 .. 打头,加载相对路径的模块。. 表示当前目录,.. 表示上层目录。 require('./foo.js') 将加载当前文件所在目录的 foo.js 的文件。
前端GoGoGo
2018/08/24
1.4K0
Angular中,模块加载的几种方法 原
好处:这种方式有利于初始减少加载体积 , 不需要在app.module.ts中,主动去引入相应的模块(它们自然不会打包到AppModule中去)。
申君健
2018/09/21
2.9K0
Angular中,模块加载的几种方法
                                                                            原
教程|在 Angular 4 中加载功能模块(下)
假设多个团队正在为此应用程序开发模块。您的离岸团队刚交付了 Weather 和 Currency 模块。您的任务是将新模块合并到主应用程序中。
疯狂的技术宅
2019/03/28
2.3K0
教程|在 Angular 4 中加载功能模块(下)
教程|在 Angular 4 中加载功能模块(上)
过去几年来,Angular 作为单页 Web 应用程序的开发框架变得越来越流行。尽管 Angular 4 最初是为 JavaScript 而设计的,但它在 Angular 2 基础之上添加了对更多语言的支持,比如 Dart 和 Typescript。
疯狂的技术宅
2019/03/28
2.3K0
教程|在 Angular 4 中加载功能模块(上)
angular2中在使用路由懒加载时候出现的错误
ERROR in Cannot use 'in' operator to search for 'providers' in null 出现这个问题的原因是,在使用懒加载的时候,没有指定module,没有找到相关的提供信息。 const routes: Routes = [ {path:'login',component:loginComponent}, { path: 'about', loadChildren: './home/home/home.module'},] 以上是修改之前报错的代码:
杭州前端工程师
2018/06/15
5.4K0
Angular 2 模块(Modules)
Angular 应用是模块化的,Angular 有自己的模块系统,叫做 Angular 模块 or NgModules。 模块 . 每个 Angular 应用至少有一个模块——根模块,通常叫做
孙亖
2018/06/06
9070
深入了解 webpack 模块加载原理
无论你开发使用的是 CommonJS 规范还是 ES6 模块规范,打包后的文件都统一使用 webpack 自定义的模块规范来管理、加载模块。本文将从一个简单的示例开始,来讲解 webpack 模块加载原理。
谭光志
2020/09/28
1.4K0
Angular中ngCookies模块介绍
1.Cookie介绍 Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie。内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。硬盘Cookie保存在硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的。所以,按存在时间,可分为非持久Cookie和持久Cookie。 主要因为HTTP协议无状态性,服务器需要知道用户在之前的页面做了哪些操作,所欲引入Cookie,是一种解决HT
八哥
2018/01/18
2.5K0
Angular中ngCookies模块介绍
webpack中的模块(modules)
在模块化编程中,开发者将程序分解成离散功能块(discrete chunks of functionality),并称之为模块。
刘亦枫
2020/03/19
8030
webpack异步加载_webpack配置按需加载
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/01
1.1K0
angular2路由预加载
1. 实现PreloadingStrategy 类 import { PreloadingStrategy, Route } from "@angular/router"; import { Observable } from "rxjs"; /** * 预加载策略 */ export class SelectivePreloadingStrategy implements PreloadingStrategy { preload(route: Route, load: Function): O
用户1437675
2018/08/20
1K0
【Angular专题】——(2)【译】Angular中的ForwardRef
先做一个小声明,我们现在拥有一个AppComponent,并使用DI系统向其中注入了一个NameService,因为我们使用的是Typescript,所以需要做的工作就是在构造函数的参数中声明变量nameService的类型为NameService,这样做的目的是为了向Angular提供运行时解析依赖所需要的相关信息。
大史不说话
2018/12/27
3.3K0
【Angular专题】——(2)【译】Angular中的ForwardRef
Webpack插件按需加载组件_webpack懒加载
学习Vue的时候,各类教程都会告诉我们:Vue 的特点是SPA——Single Page Application(单页应用程序)。它有着诸如:“只有第一次会加载页面, 以后的每次页面切换,只需要进行组件替换;减少了请求体积,加快页面响应速度,降低了对服务器的压力” 等等优点。
全栈程序员站长
2022/11/08
1.5K0
Webpack插件按需加载组件_webpack懒加载
python中动态加载模块和类方法实现
> "D:\Python27\python.exe"  "D:\test\src\mytest.py" #module: <module 'mytest' from 'D:\test\src\mytest.py'> #c: mytest.TestClass #obj: <mytest.TestClass instance at 0x025F2AA8> <mytest.TestClass instance at 0x025F2AA8> test #mtd: <bound method TestClass.echo of <mytest.TestClass instance at 0x025F2AA8>> test #t: 3 1
py3study
2020/01/09
1.2K0
angular 路由懒加载_angular路由
在angular中路由即能加载组件又能加载模块,而我们说的懒加载实际上就是加载模块,目前还没有看到懒加载组件的例子。 加载组件使用的是component关键字 加载模块则是使用loadChildren关键字
全栈程序员站长
2022/11/08
1.3K0
webpack原理(2):ES6 module在Webpack中如何Tree-shaking构建
DCE 作用于模块内(webpack 的 DCE 通过 UglifyJS 完成),而 Tree-shaking 则是在打包的时候通过模块之间的信息打包必须的代码。
周陆军博客
2023/03/18
8040
Angular 2 中的绑定的方法在无限循环吗?
我在自己的Ionic 2项目中,使用卡片列出数据: <ion-card *ngFor="let item of inspects"> 卡片中有一个导航按钮,根据每项的数据生成连接打开百度地图,我是这样绑定的: 页面: <a [href]="nav(item)" target="_blank" ion-button icon-left clear small> <ion-icon name="pin"></ion-icon> <div>导航</div> </a> 代码:
孙亖
2018/06/07
4K0
在Linux下为Apahce加载rewrite模块
在开发时,经常会用到Apache的rewrite功能,如果你的Apache已经安装配置好了,这时需要加载rewrite模块的话,可以按照如下方法进行:
魏杰
2022/12/23
1.2K0
在Linux下为Apahce加载rewrite模块
Webpack 模块化原理和SourceMap
原创不易,未经作者允许禁止转载!! Webpack模块化 Webpack打包的代码,允许我们使用各种各样的模块化,但是最常用的是CommonJS、ES Module。 包括如下原理: CommonJS模块化实现原理; ES Module实现原理; CommonJS加载ES Module的原理; ES Module加载CommonJS的原理; CommonJS: 打包前 const { dateFormat, priceFormat } = require('./js/format'); console.
前端LeBron
2021/12/08
5400
Angular 启用预加载
在使用路由延迟加载中,我们介绍了如何使用模块来拆分应用,在访问到这个模块的时候, Angular 加载这个模块。但这需要一点时间。在用户第一次点击的时候,会有一点延迟。
玖柒的小窝
2021/11/03
1.6K0
Angular 启用预加载

相似问题

错误:未找到-单击DB (Couchdb)时丢失

12

命令未找到

37

命令未找到

13

未找到命令

21

命令未找到

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档