小编tsc*_*uck的帖子

聚合根引用其他聚合根

我目前正在使用DDD工作很多,并且在从其他聚合根加载/操作聚合根时遇到问题.

对于我模型中的每个聚合根,我也有一个存储库.存储库负责处理根的持久性操作.

假设我有两个聚合根,包含一些成员(实体和值对象).

AggregateRoot1和AggregateRoot2.

AggregateRoot1有一个引用AggregateRoot2的实体成员.

  1. 当我加载AggregateRoot1时,我是否应该加载AggregateRoot2?
  2. AggregateRoot2的存储库是否应对此负责?
  3. 如果是这样,AggregateRoot1中的实体是否可以调用AggregateRoot2的存储库进行加载?

此外,当我在AggregateRoot1中的实体与AggregateRoot2之间创建关联时,是应该通过实体还是通过AggregateRoot2的存储库来完成?

希望我的问题有道理.

[编辑]

当前的解决方案

Twith2Sugars的帮助下,我提出了以下解决方案:

如问题中所述,聚合根可以具有引用其他根的子项.将root2分配给root1的其中一个成员时,root1的存储库将负责检测此更改,并将其委派给root2的存储库.

public void SomeMethod()
{
    AggregateRoot1 root1 = AggregateRoot1Repository.GetById("someIdentification");
    root1.EntityMember1.AggregateRoot2 = new AggregateRoot2();
    AggregateRoot1Repository.Update(root1);
}

public class AggregateRoot1Repository
{
    public static void Update(AggregateRoot1 root1)
    {
        //Implement some mechanism to detect changes to referenced roots
        AggregateRoot2Repository.HandleReference(root1.EntityMember1, root1.EntityMember1.AggregateRoot2)
    }
}
Run Code Online (Sandbox Code Playgroud)

这只是一个简单的例子,没有Demeter法或其他最佳原则/实践包括:-)

进一步评论赞赏.

domain-driven-design aggregate loading repository aggregateroot

27
推荐指数
2
解决办法
1万
查看次数

使用新的代码安全模型保护网站程序集

我目前正在创建一个项目MVC site.由于需要插入第三方dll以提供自定义功能,因此该站点需要使用代码访问安全性.现在我们不希望这些程序集具有完全信任,因此在其中使用新的安全模型.NET 4.0

由于这些要求,我们正在强制命名所有自己的程序集,并将它们安装在gac中.其中一些程序集是与SecuritySafeCritical和SecurityCritical类型和成员混合的SecurityTransparent.

securityTransparent和SecurityCritical程序集,类型和成员可以像我们想要的那样由第三方程序集开发人员使用.

我现在对Global.asax文件有这个问题,该文件继承自驻留在标有该AllowPartiallyTrustedCallers属性的程序集中的类.

这个类又继承自HttpApplication.

在我web.config的信任级别目前设置为高.

我收到以下错误:

违反类型的继承安全规则:'ASP.global_asax'.派生类型必须与基本类型的安全可访问性匹配,或者不太容易访问

我想这是因为使用安全模型时的继承规则,并且HttpApplication该类必须具有比SecurityTransparent更严格的规则.

我尝试用SecuritySafeCritical属性标记我的自定义类,但没有运气.

我希望你们中的一些人能解决这个问题.

plugins .net-4.0 code-access-security global-asax asp.net-mvc-3

12
推荐指数
1
解决办法
482
查看次数