小编Jon*_*n M的帖子

你如何打破实体之间的循环关联?

我第一次在网站上如果标记错误或在其他地方得到回答,请道歉...

我一直在处理当前项目中的特定情况,我想知道你们如何处理它.模式是:父项具有子集合,父项具有对子集合中特定项的一个或多个引用,通常是"默认"子项.

一个更具体的例子:

public class SystemMenu 
{
    public IList<MenuItem> Items { get; private set; }
    public MenuItem DefaultItem { get; set; }
}

public class MenuItem
{
    public SystemMenu Parent { get; set; }
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

对我而言,这似乎是建立关系的一种很好的干净方式,但由于循环关联而立即导致问题,由于循环外键,我无法强制执行DB中的关系,并且LINQ to SQL因为循环关联.即使我能绕道而行,但这显然不是一个好主意.

我目前唯一的想法是在MenuItem上有一个'IsDefault'标志:

public class SystemMenu 
{
    public IList<MenuItem> Items { get; private set; }
    public MenuItem DefaultItem 
    {
        get 
        {
            return Items.Single(x => x.IsDefault);
        }
        set
        {
            DefaultItem.IsDefault = false;
            value.DefaultItem = true;
        }
    }
} …
Run Code Online (Sandbox Code Playgroud)

c# sql oop modeling

13
推荐指数
3
解决办法
2514
查看次数

ActiveRecord 3.1.0多个数据库

我正在尝试将ActiveRecord gem升级到最新的3.1.0版本并看到引发了很多异常,我认为这是由于我们如何处理多个数据库.

对于我们的每个数据库,我们指定一个单独的基类,它继承自那里ActiveRecord::Baseestablish_connection在其中调用.没有跨数据库关系.到目前为止,这对我们来说运作良好.

升级到ActiveRecord 3.1.0后,我发现它ActiveRecord::ConnectionNotEstablished在遍历关系时会出现异常(即它会成功从数据库中提取单个实体或一组,但在导航到相关类时失败).

回溯的顶线是C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:410:in 'retrieve_connection',所以我稍微挖了一下.该方法定义如下:

def retrieve_connection(klass) #:nodoc:
    pool = retrieve_connection_pool(klass)
    (pool && pool.connection) or raise ConnectionNotEstablished
end
Run Code Online (Sandbox Code Playgroud)

我的简单test(puts Customer.first.address)调用了retrieve_connection3次.两次Customer作为klass参数,一次ActiveRecord::Base作为参数 - 当它失败时,因为establish_connection没有被调用ActiveRecord::Base.

那么实际的问题是 - 在ActiveRecord中有一种新的推荐方法来处理多个数据库连接吗?如果是这样,它是什么?

如果没有,可能导致这个问题的原因是什么?

ruby activerecord

9
推荐指数
1
解决办法
2957
查看次数

异步API是否应该同步抛出?

我正在编写一个JavaScript函数,它发出HTTP请求并返回结果的承诺(但这个问题同样适用于基于回调的实现).

如果我立即知道为函数提供的参数是无效的,那么函数应该是throw同步的,还是应该返回一个被拒绝的promise(或者,如果你愿意的话,调用一个Error实例的回调)?

异步函数应始终以异步方式运行,特别是对于错误条件,这有多重要?是否确定throw,如果你知道程序是不是一个合适的状态的异步操作继续进行?

例如:

function getUserById(userId, cb) {
  if (userId !== parseInt(userId)) {
    throw new Error('userId is not valid')
  }

  // make async call
}

// OR...

function getUserById(userId, cb) {
  if (userId !== parseInt(userId)) {
    return cb(new Error('userId is not valid'))
  }

  // make async call
}
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous api-design promise

9
推荐指数
2
解决办法
748
查看次数

一旦使用HiLo,如果更改容量(最大Lo)会发生什么?

如果我开始使用HiLo生成器为表分配ID,然后决定增加或减少容量(即最大'lo'值),这是否会导致与已分配ID的冲突?

我只是想知道是否需要在数字上加上一个大红旗,上面写着"永远不要改变这个!"

注意 - 不是特定于NHibernate,我只是对一般的HiLo算法感到好奇.

algorithm hilo

8
推荐指数
1
解决办法
6176
查看次数

在CQRS(事件源)中,您是否需要事件存储中的全局序列计数器?

在试图了解CQRS(和一般的DDD)时,我遇到了两种事件发生在不同聚合上的情况,但它们的顺序具有域意义.如果是这样,那么它们可能发生得如此紧密,以至于时间戳(我所看到的示例实现所使用的)无法区分它们,这意味着事件存储不包含域的"完整"表示,因为订单存在歧义事件发生的地方.

例如,域可以触发CustomerCreatedEvent适用于Customer聚合的a,然后触发聚合CustomerAssignedToAgent上的事件Agent.如果CustomerAssignedToAgent事件发生在事件之前CustomerCreatedEvent,则该事件没有意义,但通常这两个事件都可能由于一个操作而被触发,这使得时间戳可能实际上是相同的.

所以我只是对事物进行严格建模?是否应该存在跨不同聚合的事件序列很重要的情况?或者您应该在事件存储中保留全局序列号,以便您可以确定事件发生的确切顺序?

domain-driven-design cqrs

5
推荐指数
2
解决办法
2718
查看次数

为什么不能推断出这些泛型类型参数?

给定以下接口/类:

public interface IRequest<TResponse> { }

public interface IHandler<TRequest, TResponse>
    where TRequest : IRequest<TResponse>
{
    TResponse Handle(TRequest request);
}

public class HandlingService
{
    public TResponse Handle<TRequest, TResponse>(TRequest request)
        where TRequest : IRequest<TResponse>
    {
        var handler = container.GetInstance<IHandler<TRequest, TResponse>>();
        return handler.Handle(request);
    }
}

public class CustomerResponse
{
    public Customer Customer { get; set; }
}

public class GetCustomerByIdRequest : IRequest<CustomerResponse>
{
    public int CustomerId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试编写如下内容,为什么编译器无法推断出正确的类型:

var service = new HandlingService();
var request = new GetCustomerByIdRequest { …
Run Code Online (Sandbox Code Playgroud)

c# generics inference

4
推荐指数
1
解决办法
1460
查看次数