我有一个Generic IRepository<T>
,它在Infrastructure.NHibernate
下实现,使用Simple Injector
将实现注入接口。 IRepository<T>
生活在我的Domain
中,以便域对象可以使用注入的存储库。
我有一个User``AggregateRoot
,其中包含有关应用程序数据库中用户的一些详细信息,Id
,Firstname
,Lastname
。我知道不要关心持久性,但是我们现在讨论的是这些对象是如何持久化的。
在我的Web.UI
(ASP.Net MVC 5)中,我有一个屏幕,我可以在其中更新用户详细信息,Firstname
,Lastname
,Email
,{{1 }}。 ID已存储但无法更新。
当我更新Address
详细信息时,我使用User
更新IRepository<User>
和Firstname
。
问题:我还需要更新Lastname
服务器中的Firstname
,Lastname
,Email
,Address
。
我有一个OpenLdap
项目,其中包含所有Ldap实现等。 (存储库,服务,实体,帮助者,转换器)。
更新LDap服务器的最佳方法是什么?
我是否在Infrastructure.Ldap
中ISomeRepository
实现了另一个Domain
接口?这意味着我需要向Infrastructure.Ldap
添加其他属性,并覆盖ORM映射以忽略其他属性。然后,我使用User
,然后使用IRepository
更新两个数据库中的用户。
或
Web.UI已经是一个基础架构问题,因此我只引用ISomeRepository
项目并直接与ldap存储库对话,该存储库将与Infrastructure.Ldap
对象一起使用。这将让我分别在Ldap上更新用户。
我很困惑,业务规则是我们需要更新用户详细信息。我假设从DDD的角度来看,需要更新的所有细节都需要存在于域中。如何将此LDapUser
保留在2个不同的数据存储中?
我的选项之一是否有效且通过了良好实践,或者是否有不同的解决方案?业务需要有2个不同的数据存储,因此我需要完成这项工作。
User
,Id
,Firstname
- 如果Ldap关闭,它将存储在应用程序数据库中,稍后将用于审核目的。
Lastname
,Id
,Firstname
,Lastname
,Email
- 这存储在用户管理的Address
服务器部分。
有人可以请我指出正确的方向。由于他对持久性需要发生的限制,很难从DDD角度严格考虑这种情况。如果它全部在应用程序数据库上,那将很容易。
答案 0 :(得分:4)
您可以在存储库中使用json = params["Comment"]
newArray = []
json.split(" ").each do |element|
if element.length > 1
newArray << element
end
end
设计模式:
Composite
我们假设存在public IRepository<T>
{
void Save(T entity);
}
public class CompositeRepository<T> : IRepository<T>
{
private readonly IEnumerable<IRepository<T>> repositories;
public CompositeRepository(IEnumerable<IRepository<T>> repositories)
{
if(repositories == null)
{
throw new ArgumentNullException("repositories");
}
this.repository = repositories;
}
public void Save(T entity)
{
foreach(var repository in repositories)
{
repository.Save(entity);
}
}
}
和SqlUserRepository
,并且两者都实现了LdapUserRepository
。然后,您可以使用容器注册IRepository<User>
:
CompositeUserRepository
由于您的服务进一步使用了container.RegisterCollection<IRepository<User>>(new[] { typeof(SqlUserRepository),
typeof(LdapUserRepository) });
container.Register<IRepository<User>, CompositeRepository<User>>();
,因此在向IRepository<User>
添加持久性User
时无需更改。我们也通过这种方式实现了很好的副作用,在存储库的上下文中解决了这个问题 - LDAP
原则。