我刚刚在Haskell中调查FRP(主要是reactive-banana(推荐!)),我想知道它们是否常见,并且在反应性香蕉的情况下,在IOmonad中操作的原因是什么,而不是受限制MonadIO,或者rven更好,任何Monad(所以我可以提供自己的堆栈)?
在我看来,这是因为专注于GUI编程,你将它与一些现有的库集成在一起IO?是否可以更改它以便我可以将它与自定义monad堆栈集成?
我尝试减去2个列表,如下面的代码,assignUsers有3个记录,assignedUsers并有2行.之后Except方法我仍然得到3行,但我应该得到1记录,因为两行中assignedUsers类似于assignUsers
var users = accountApp.GetUsersByAccountId(context.GetUserData().AccountId);
List<AssignUserViewModel> assignUsers = Mapper.Map<List<AssignUserViewModel>>(users).ToList();
var mailUsers = mailApp.GetMailAssignedByMailId(id).Select(m => new { m.UserId, m.User.Name }).ToList();
List<AssignUserViewModel> assignedUsers = mailUsers.Select(Mapper.DynamicMap<AssignUserViewModel>).ToList();
assignUsers = assignUsers.Except(assignedUsers).ToList();
Run Code Online (Sandbox Code Playgroud) 我想知道如何构建一个用户能够向其他用户发送消息的系统.当然,每个人都需要只能访问他的收件箱,因此我们需要每用户数据库基础设施.按照http://guide.couchdb.org/draft/notifications.html中的示例,我们看到用户可以将消息放入收件人的数据库中.简单有效.
但是,如果我们不想让用户知道收件人数据库名称呢?如果我们想要一个通过查看消息文档的to字段(可能是用户名,与其数据库名称完全无关)来解析收件人数据库的系统,该怎么办?
{
"to": "john.kowalski",
"from": "jake.podolski",
"subject": "hi",
"message": "..."
}
Run Code Online (Sandbox Code Playgroud)
对于额外的等级来说,这似乎是一个完美的任务,但那么它就没有乐趣而且不值得提问,所以我们将尝试通过复制来解决它:
但是,这会产生问题,因为主数据库必须对所有用户可见!那么......如果我们能够添加用户 - >主复制任务,那么消息将从用户数据库中传输到主数据库,然后放入收件人数据库(哦,主,它变得越来越复杂,我们可能已经浪费时间试图以这种方式解决它,但让我们试试).
这里的第三步存在问题(没有该步骤,用户将能够通过填写来自字段的虚假信息来发送冒充任何其他用户的消息) - 我们如何能够将其他数据传递给验证函数,这是目前唯一的参数据我所知:
通过调用1.1.0中引入的复制器数据库功能,我们可以将user_ctx上下文传递给复制任务.这个对象是否可以包含自定义数据而不是真实的用户信息?这将如何影响CouchDB处理数据库访问的标准方式?
如果可能,复制任务只会将收件人名称作为user_ctx下的参数填充,则验证函数将使用该值与from字段进行比较.用户无法像其他人一样"发送"消息.
我已经在F#中定义了以下类,具有Linq到SQL的映射属性:
[<Table(Name="Expense")>]
type public Expense(datetime : Nullable<DateTime>, value, category, comment) =
let mutable id = 0
let mutable datetime = if datetime.HasValue then datetime.Value else DateTime.Now
let mutable value = value
let mutable category = category
let mutable comment = comment
[<Column(IsPrimaryKey=true, IsDbGenerated=true, AutoSync=AutoSync.OnInsert)>]
member x.ExpenseID with get() = id and set v = id <- v
[<Column>]
member x.DateTime with get() = datetime and set v = datetime <- v
[<Column>]
member x.Value with get() = value and set …Run Code Online (Sandbox Code Playgroud) 我想知道在使用某些事件采购解决方案重放事件时将事件应用到状态时应该包含哪些逻辑.
具体来说,我想知道验证,说我有实体可以处于以下状态之一:
并且进度需要Logged-> Active-> Close或Logged-> Active-> Cancelled,我们不能直接从Logged跳转到Close.
现在,我理解,验证应该包含在命令中:UpdateState将检查实体当前状态是否允许转换到所需的状态,并且将产生StatusUpdated将持久存储到事件存储中的适当事件.
问题是,重播时该怎么办?我应该只更新状态,还是应该执行相同的验证(如果状态转换要求发生变化,除非我们添加一些额外的逻辑,否则无法加载一些以前更新的实体),以确保我们不会最终那些不符合我们当前逻辑的实体?
PS.我认为我有把握它的问题,因为在我的理解中,事件本质上只是'宣布'已经发生的事情(并且发送者状态已经被修改),以便有趣的各方可以做出相应的反应.如果事件加载/重放,你需要改变所述状态而不是实际"宣布"任何东西......