我正在研究使用DDD + CQRS + EventSourcing制作应用程序,我在确定如何进行用户身份验证方面遇到了一些麻烦.
用户本质上是我的域的一部分,因为他们负责客户.我正在使用ASP.NET MVC 4,我希望只使用SimpleMembership.由于登录和授权用户是同步操作,如何在最终一致的架构中解决这个问题?
我是否必须滚动自己的auth系统,在读取端保留非规范化的auth表?如何处理这个的安全性?我最终会在我的事件存储区和视图表中存储密码哈希值吗?
这么多问题,如果有人能说清楚,我会非常感激:)
tldr; 你如何在EventSource应用程序中进行用户身份验证?
authentication authorization cqrs event-sourcing event-store
我很高兴用C#5.0创建我的第一个应用程序,我想使用async/await关键字来减轻异步数据调用的痛苦.
我有点困惑的是,接口不允许async关键字成为合同的一部分,因为await关键字仅适用于异步标记方法.这意味着不可能通过接口引用调用异步方法.这也适用于抽象方法.我在这里错过了什么吗?这意味着我的常规DI内容将不再有效:
IAsyncRepository<T> {
Task<IList<T>> GetAsync(); // no 'async' allowed
}
abstract class AsyncRepositoryBase<T> {
public abstract Task<IList<T>> GetAsync(); // no 'async' allowed
Run Code Online (Sandbox Code Playgroud)
//客户端代码:
IAsyncRepository<Model> repo = ioc.Resolve<IAsyncRepository<Model>>();
var items = await repo.GetAsync(); // DOOOOOH, will not compile!
Run Code Online (Sandbox Code Playgroud)
这是我目前的解决方案:
public abstract class AsyncRepositoryBase<T>
{
protected Task<IList<T>> _fetcherTask;
protected AsyncRepositoryBase(Task<IList<T>> fetcherTask)
{
_fetcherTask = fetcherTask;
}
public virtual async Task<IList<T>> GetASync()
{
return await _fetcherTask;
}
}
Run Code Online (Sandbox Code Playgroud)
我是否必须在抽象和语言功能之间做出选择?请告诉我,我错过了什么.