0

我有一个 VS2015 解决方案,其中包含一个 webUI 项目和一个充当域的类库项目。类库仅包含 20 个 EF DB First 生成的类(edmx 模型)以及 20 个作用于这些类的 repo。当我需要更改底层数据库时,我会丢弃 edmx 模型并重新生成它。其中一类是Domain.DbEntities.plc. 我的 webUI 引用了这个域库。

一段时间后,我PlcCommunicator在解决方案中添加了一个额外的项目,它引用了Domain lib并且有一些接受Domain.DbEntities.plc作为参数的方法和一些返回的包装类也使用Domain.DbEntities.plc. 我的 webUI 项目引用了“PlcCommunicator”项目,一切正常。

解决方案越来越大,当我向它添加更多项目时,它们都引用和使用相同的Domain lib. 但是现在我添加了另一个名为的项目PlcMonitoringLogger,我决定创建另一个较小的域,它只是主域的一个子集,它包含 5 个类,这些类也都是 EF DB First 生成的 edmx 类,它们在与Main Domain. 其中一类是PlcMonitoringDomain.DbEntities.plc. (注意与 的区别Domain.DbEntities.plc

现在我需要我的PlcMonitoringLogger项目来使用该PLCCommunicator项目。但PlcCommunicator适用于Domain.DbEntities.plc并且PlcMonitoringLogger只知道PlcMonitoringDomain.DbEntities.plc. 所以我面临的问题是......我可以更改PlcCommunicator方法的参数以接受plcid 而不是Domain.DbEntities.plc对象,也可以只返回plcid 而不是Domain.DbEntities.plc对象。然而,这是正确的做法吗?有什么陷阱吗?优缺点都有什么?另一种解决方案可能是创建一个base plc class,但这似乎不正确。我想将事物彼此分离,并且创建base类感觉不对。

我读了一些关于有界上下文的东西。但是我不能也不想立即将我现有的项目更改为使用这种设计模式。不是最后一位,因为我还没有这方面的经验,而且对于初学者来说很难。我认为在有界上下文之外使用某些方面的“婴儿步骤”是最好的方法,而不是进行完全重建!

因此,如果有人对此主题有一些想法或有用的话,请回复!

4

1 回答 1

0

我不确定您试图通过创建子域来实现什么,但结果是它们不可互换。因此,如果您想组合导致域混淆的组件,那么您不能这样做。

恕我直言,解决方案是摆脱子域,并将其集成到当前的主域中。任何使用该域的项目/组件都可以毫无问题地引用其他使用该域的组件。没有多个域混淆。

于 2016-12-14T11:21:08.143 回答