我第一次在网站上如果标记错误或在其他地方得到回答,请道歉...
我一直在处理当前项目中的特定情况,我想知道你们如何处理它.模式是:父项具有子集合,父项具有对子集合中特定项的一个或多个引用,通常是"默认"子项.
一个更具体的例子:
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) 我正在尝试将ActiveRecord gem升级到最新的3.1.0版本并看到引发了很多异常,我认为这是由于我们如何处理多个数据库.
对于我们的每个数据库,我们指定一个单独的基类,它继承自那里ActiveRecord::Base
并establish_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_connection
3次.两次Customer
作为klass
参数,一次ActiveRecord::Base
作为参数 - 当它失败时,因为establish_connection
没有被调用ActiveRecord::Base
.
那么实际的问题是 - 在ActiveRecord中有一种新的推荐方法来处理多个数据库连接吗?如果是这样,它是什么?
如果没有,可能导致这个问题的原因是什么?
我正在编写一个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) 如果我开始使用HiLo生成器为表分配ID,然后决定增加或减少容量(即最大'lo'值),这是否会导致与已分配ID的冲突?
我只是想知道是否需要在数字上加上一个大红旗,上面写着"永远不要改变这个!"
注意 - 不是特定于NHibernate,我只是对一般的HiLo算法感到好奇.
在试图了解CQRS(和一般的DDD)时,我遇到了两种事件发生在不同聚合上的情况,但它们的顺序具有域意义.如果是这样,那么它们可能发生得如此紧密,以至于时间戳(我所看到的示例实现所使用的)无法区分它们,这意味着事件存储不包含域的"完整"表示,因为订单存在歧义事件发生的地方.
例如,域可以触发CustomerCreatedEvent
适用于Customer
聚合的a,然后触发聚合CustomerAssignedToAgent
上的事件Agent
.如果CustomerAssignedToAgent
事件发生在事件之前CustomerCreatedEvent
,则该事件没有意义,但通常这两个事件都可能由于一个操作而被触发,这使得时间戳可能实际上是相同的.
所以我只是对事物进行严格建模?是否应该存在跨不同聚合的事件序列很重要的情况?或者您应该在事件存储中保留全局序列号,以便您可以确定事件发生的确切顺序?
给定以下接口/类:
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# ×2
activerecord ×1
algorithm ×1
api-design ×1
asynchronous ×1
cqrs ×1
generics ×1
hilo ×1
inference ×1
javascript ×1
modeling ×1
oop ×1
promise ×1
ruby ×1
sql ×1