将实体不太友好的遗留模式映射到实体

Mapping not-so-entity-friendly legacy schema to entities

好吧,我真的坚持这个。基本上,我们的数据库中有一个遗留 table(+ 规范化 tables),应该在不改变 table 模式的情况下从中创建真正的域实体。 table 看起来像这样:

# identity table
| Domain (CK) | Group (CK) | Name (CK) | Password |
|-------------|------------|-----------|----------|
| root        |            |           |          |
| root        | group1     |           |          |
|             | group1     | someuser  | XXXXXX   |
|             | group2     |           |          |
|             |            | otheruser | XXXXXX   |

(CK = composite key)

旧应用程序强制执行以下规则:

我们最终想要的是这样的实体(伪):

class Domain {
    string Name;
    addUser(user);
    addGroup(group);
}

class Group {
    string Name;
    addUser(user);
}

class User {
    string Name;
    string Password;
}

我能想到的解决此问题的唯一两种方法是:

具体问题:

可以稍微作弊而不将它们视为成熟的域实体。相反,您可以将用户管理视为具有自己的限界上下文的单独子域。使用反腐败层将 BC 与域的其余部分隔离开来,该反腐败层将此 BC 的语言转换为通用域的语言。通常,AC 层将涉及从旧的、设计糟糕的 类 到新的 DomainGroupUser 类.

的映射器

我认为这是最明智的方式,可以立即开始从您的主域中干净的用户管理实体中获益,同时保持对您的身份模块和数据库进行彻底改造的选项开放(我想这应该是最终的目标)。