使用时,下面的代码不起作用RegistrationBuilder.如果RegistrationBuilder未将其添加到AssemblyCatalog构造函数中,请键入约束泛型工作.
[TestClass]
public class TypeConstraints
{
[TestMethod]
public void TypeConstraintTest()
{
var rb = new RegistrationBuilder();
var a = new AssemblyCatalog(Assembly.GetExecutingAssembly(), rb);
//var a = new AssemblyCatalog(Assembly.GetExecutingAssembly()); //Works!
var aggr = new AggregateCatalog(a);
var c = new CompositionContainer(aggr);
var item = c.GetExportedValue<IConstrained<Item>>();
Assert.IsNotNull(item);
}
}
public interface IConstrained<T> where T : IItem
{}
[Export(typeof (IConstrained<>))]
public class Constrained<T> : IConstrained<T> where T : IItem
{}
public class Item : IItem
{}
public interface IItem
{}
Run Code Online (Sandbox Code Playgroud) 鉴于这些表
Foo
id (PK)
name
updated
Run Code Online (Sandbox Code Playgroud)
Bar
foo_id (FK)
name
updated
Run Code Online (Sandbox Code Playgroud)
这个查询:
SELECT *
FROM Foo as f
JOIN Bar as b
ON f.id=b.foo_id
WHERE b.name = 'Baz' AND f.name = 'Baz'
ORDER BY f.updated ASC, f.id ASC
LIMIT 10
OFFSET 10
Run Code Online (Sandbox Code Playgroud)
这些索引是否适合添加 - 在 MySql InnoDB 中,主键列会自动添加到辅助索引的末尾。Postgres 的情况如何?
CREATE INDEX foo_name_id_idx ON foo(name, id)
CREATE INDEX bar_name_id_idx ON bar(name, id)
Run Code Online (Sandbox Code Playgroud) 我公司正在尝试采用DDD。似乎DDD的指导是要求域程序集定义其所有服务接口,并允许实现者对域程序集进行引用并实现服务接口。然后使用DI,该域将获得实现。但是,出于交叉考虑,要求域程序集重新定义接口(例如日志记录等)不是接口程序集的核心业务领域,这是不负责任的。我注意到,诸如Quartz.NET之类的许多商业组件都在使用一组标准的,广泛接受的接口,例如Apache Commons,以一种框架友好的方式解决了跨领域的问题。这是否与DDD方式一致,还是真的像AOP这样跳了起来,
以供参考:
来自http://www.infoq.com/articles/ddd-in-practice
“这些是可重用的非域相关问题,通常会在包括域层在内的所有代码中分散和重复。将这种逻辑嵌入域对象中会导致域层与非域相关代码纠结和混乱。”
来自http://cyrille.martraire.com/2009/12/your-crosscuttingconcerns-are-someone-else-core-domai/
“您的跨领域问题是其他人的核心领域”
给定一个这样的原型:
message Request {
uint64 account_id = 1;
message Foo{
uint64 foo_id = 1;
}
repeated Foo foos = 2;
Run Code Online (Sandbox Code Playgroud)
当我添加一个名为的字段时bar_id
message Request {
uint64 account_id = 1;
message Foo{
uint64 foo_id = 1;
uint64 bar_id = 2;
}
repeated Foo foos = 2;
Run Code Online (Sandbox Code Playgroud)
client使用旧的via反序列化时出现错误proto.UnmarshalText(msg, request)。错误是unknown field name "bar_id" in serviceA.Request_Foo。
我知道 proto-3 中的处理方式发生了很多变化unknown field,但这不是预期的,因为它似乎违反了前向兼容性(新服务器向旧客户端发送请求)。这与使用嵌入类型有关吗?在不强制客户端更新的情况下更新服务器的最佳方法是什么?