0

我在我的解决方案资源管理器中分离了各个层(类库项目),如下所示:

我想使用 PetaPoco micro-ORM,有人建议我在 Repository 层添加 PetaPoco。按照建议,我将 PetaPoco 添加到 Repository 项目并从数据库生成模型。现在自动生成的 POCO 驻留在存储库中。

我没有关注的是当我想要实现 DDD 时,我想要模型中的所有 POCO,即业务层。

我在 WebUI 层添加了一个用于登录用户的 WebForm。现在要使用 DDD 时,需要 Model 中的接口吗?在哪里编写验证登录方法?

4

1 回答 1

2

我强烈建议你(重新)阅读 Eric Evans 关于领域驱动设计的书。你也应该看先生。埃文斯在本书之后的视频。DDD 与存储库、数据库、程序集或用户登录无关。

DDD 也有可能不是您真正想要的。似乎您正在寻找一种分层方法,在数据库顶部的一些存储库顶部的一些实体/应用程序服务顶部的用户界面。根据您正在构建的内容,这实际上可能就是您所需要的。

如果您想使用 PetaPoco 并且您的“orm”从数据库生成“模型”,那么将它们分开在不同的项目中没有多大意义。模型由 orm 生成的事实(以及它们将来可能需要重新生成的事实)使它们与 orm 完全耦合,因此将它们移动到单独的组件中不会给您带来任何好处。

要回答您的 ValidateLogin 问题,我建议将所有与身份验证相关的代码移动到与其他层正交(垂直)的基础设施层。应用程序用户不一定需要是“实体”。您可能还可以在处理身份验证的模型层中使用应用服务,但我通常发现身份验证是基础架构问题而不是业务问题。

最后,我建议您熟悉此类架构的缺陷和优势,然后确定它是否适合您正在构建的内容。另一方面,您需要意识到构建 DDD 并不便宜,而且(正如 Evand 先生所说)您可能不会在最初的几次中把它做好。

于 2012-09-09T18:54:11.047 回答