【问题标题】:Design Entities with union architecture concepts具有联合架构概念的设计实体
【发布时间】:2016-08-09 06:53:04
【问题描述】:

根据Union Architecture 的概念,我的实体(POCO)存在于内层,它对其他项目或库没有任何依赖。

我将 ArangoDB NoSql 用于我的数据访问层,我必须在我的 c# 属性上使用“ArangoDB 属性”来将我的属性映射到 ArangoDD 字段:

例如:

public class User
{
    [AliasField("_key")]
    public string Id { get; set; }
}


对于这个问题,我不得不参考Arango.Client Dll!:

现在,我必须为这个问题做些什么?如何删除我的依赖项?

谁能帮帮我?

【问题讨论】:

    标签: c# design-patterns architecture arangodb


    【解决方案1】:

    这是洋葱架构。

    确实,您的域不应该有任何指向持久性的链接。

    如图所示,持久性是基础架构层的一部分。 您必须创建一个依赖于您的核心模型和 ArangoDB 的持久层。 在那里,您可以创建带有 ArangoDB 注释的实体并将它们映射到您的域,或者您可以以其他方式提供映射,这样您就不需要模型之间的这种转换。

    使用洋葱架构会带来更多工作,尤其是在设置新项目时,但它也提供了许多好处。

    【讨论】:

    • 谢谢,我不想使用你的第一个解决方案(创建一个依赖于你的核心模型和 ArangoDB 的持久层)。这对我来说成本很高......第二个解决方案很好似乎!但我怎么做映射?与自动映射器一起使用?我猜 Auto Mapper 不能解决我的问题?是否有任何名称:代理属性?!我有点困惑!
    【解决方案2】:

    如果您使用ArangoDB.Client,除了指定类成员的属性外,您还可以设置命名约定的映射

    您可以更改默认标识符命名约定的方式:

    sharedSetting.Collection.ChangeIdentifierDefaultName(IdentifierType.Key, "Id");
    

    或使用类名:

    // this will resolve `UserId` => `_key`
    sharedSetting.Collection.ChangeIdentifierDefaultName(IdentifierType.Key, (m) => $"{m.Name}Id");
    

    或其他成员:

    sharedSetting.Collection.ChangeDocumentPropertyForType<User>(u => u.Id, p =>
    {
        p.PropertyName = "_key";
    });
    

    您可以在http://arangoclient.net/Document/ArangoDatabase阅读有关如何使用SharedSetting的信息

    注意ArangoDB.Client 还不支持 ArangoDB 3.0。支持将在本月添加

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多