- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 ASP.NET Core 并学习 DDD 和 CQRS(包括 MediatR)。我读过eshopcontainers文件。在我的应用程序中,我们需要在我们的 SQL 数据库中存储每个用户的谷歌访问 token 和刷新 token ,因为我们必须定期检查 gmail 中的某些状态。当我们实现该功能时,或多或少我们想编写以下逻辑。
1. Get the access token and refresh token from our DB
2. If the access token is expired, we get the valid access token with refresh token
3. If the access token is updated in step 2, we save the new access token to DB
4. With the valid access token, we fetch information from gmail
这个过程将用在 CQRS 模式中的几个命令处理程序中。
我的问题是,
我应该把 DDD、CQRS 方式的逻辑放在哪里?它应该放在存储库、应用程序服务还是域服务...?
我们可以从查询处理程序中调用该方法吗?我想知道这是因为那个逻辑偶尔会更新数据库中的数据,所以我认为我们不应该从查询处理程序中调用这个过程
我目前的想法是创建一个包含上述过程的 UserService
。我的解决方案结构的具体例子如下。 UserService
将在多个命令处理程序中使用,并且不会在 QueryHandler 中使用,因为它偶尔会更新数据库。但是,如果基于 DDD 方式有更好的想法,我很想知道。
解决方案结构
Application layer (depends on Domain and Infrastructure)
- UserController.cs
- CommandHandlers folder (several command handlers use UserService)
- QueryHandlers folder
Domain Layer (No dependency)
- UserAggregate folder
- User.cs (Model for user)
- IRepository.cs (Interface)
Infrastructure Layer (depends on Domain)
- EF Core related folder
- Repository.cs (Implemented IRepository.cs)
- UserService.cs (has the token update process)
User.cs
public class User
{
public string AccessToken { get; set; }
public string RefreshToken { get; set; }
public long Id {get; set;}
}
UserService.cs(只是一个想法)
public class UserService
{
....
GetValidAccessToken(long userId)
{
var user = repository.Find(userId);
if (user.AccessToken is expired)
{
var newAccessToken = GetNewAccesstokenWithRefreshToken(user.RefreshToken);
user.AccessToken = newAccessToken;
repository.Save(user);
}
return user.AccessToken;
}
}
最佳答案
我同意@Ankit Vijay 的观点。请接受他的回答是正确的,因为我只会对此进行扩展。
您通常在需要授权访问的集成层中使用访问 token 。例如,Web API 和其他 View Controller 。消息处理程序在使用消息队列时不应公开,因此它们通常不需要授权。
据我所知,在您的案例中,您需要使用访问 token 访问外部存储以获取用户特定的数据。这意味着访问 token 可能会在尝试该操作之前过期。
在我看来,您有 3 个选择:
1) 您在初始集成点获取相关信息,例如 Web API Controller ,然后传递该数据。
2) 您传递用户名并使用某种服务帐户为用户获取访问 token ,服务帐户有权代表用户这样做,然后使用获取相关数据的访问 token 。
3) 服务帐户可能有能力为用户收集这些额外信息,在这种情况下,服务帐户将进行身份验证以获取 token ,然后为相关用户请求数据。
在我之前的一个项目中,我们必须使用 webMethods 集成服务器,后端团队在其中使用 ADFS token 。该 token 有 8 小时的有效期,并且出于各种原因,某些操作仅在该时间之后才执行。由于服务帐户在 ADFS 上具有某种形式的委派权限,因此将为用户刷新过期 token 。我没有参与该实现,但这基本上是规避问题的想法。
如果您无法让服务帐户刷新 token 或直接获取所需数据,我想选项 (1) 是您最好的选择。
关于c# - 我应该将使用 DDD 和 CQRS 方式刷新访问 token 的代码放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59905735/
我当前项目中的许多类都有几个只能从类本身内部调用的属性和方法。此外,根据类(class)的当前状态,它们可能会扰乱类(class)的工作。 目前,所有这些接口(interface)都在 .h 文件的主
我想使用ngbTabSet将nav-pills in card-header 和tab-content in card-body。但我不知道该怎么做。 这是我尝试实现的示例(使用 bootstrap.
我正在浏览文档以查找如何允许放置在停靠栏图标上。据我所知,建议您使用 LSItemContentTypes,因为 CFBundleTypeOSTypes 已弃用。但是,我无法让 LSItemConte
我正在尝试在书签中使用 jquery UI 作为 slider 。并且 jquery ui 要求在普通 jquery 文件之后包含该文件。 所以到目前为止我所尝试的只是将脚本附加到 header ,同
您好,我尝试了广泛的谷歌搜索,但似乎没有任何帮助。 这是我的场景: 公司 Logo 存储在外部域/网址(矩形)中。 带有谷歌地图的 Ionic 应用程序,将这些 Logo 作为标记放置在 map 上。
我今天在阅读我的一些 C# 代码时发现了这一行: if (ProgenyList.ItemContainerGenerator.Status != System.Windows.Controls.Pr
我刚遇到this question在 Go FAQ 中,它让我想起了困扰我一段时间的事情。不幸的是,我真的不明白答案是什么。 似乎几乎所有非 C 类语言都将类型放在变量名之后,如下所示: var :
这是有效的 HTML 吗? 最佳答案 作为元素可以包含 phrasing content ,以及属于该组,则有效。 从语义上(并且具有一些常识),如果唯一的内容是 , 不;如果它同时包含文本和图像
这是有效的 HTML 吗? 最佳答案 作为元素可以包含 phrasing content ,以及属于该组,则有效。 从语义上(并且具有一些常识),如果唯一的内容是 , 不;如果它同时包含文本和图像
我有两本 T.Parr 写的关于 ANTLR 的书,我到处都看到美元符号和符号的引用。它也对我有用: term : IDENT -> { new TokenNode($IDENT) }; 或更复杂的东
我在实现段控制时遇到了一些问题。因为我希望它是一个固定的标题,所以当我滚动时我总是可以看到它,我已经在 - (UIView *)tableView:(UITableView *)tableView v
我有一个 20x36px (10x18pt) 的箭头图像,当我选择一个 UIImageView 时,将它拖到我的 View Controller 上然后设置图像,它总是模糊的。我只在我的项目中包含 @
How can I put background image when I hover a link Insert Bg in this a when hov
我需要在我的 .container 中添加(最新的第一个)新分区,但在 .controls (按钮)之后。可能吗? 注意:添加新的分区来保存按钮下方的前置控件对我来说不是一个选择。 HTML 需要保持
我是一名优秀的程序员,十分优秀!