2012-09-09 39 views
0

我已经分居的各个层(类库项目)在我的解决方案资源管理器中是这样的:在业务层DDD模式开始

我想用PetaPoco微ORM和someone suggested me添加PetaPoco在Repository层。正如所建议的,我将PetaPoco添加到Repository项目并从数据库生成模型。现在,自动生成的POCO驻留在存储库中。

我不遵循的是当我想要实施DDD时,我想要模型中的所有POCO,即业务层。

我添加了一个WebForm用于在WebUI层登录用户。现在,当DDD被使用时,我是否需要模型中的接口?在哪里写验证登录方法?

回答

2

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

还有一种可能性,即DDD实际上并不是您要查找的。似乎您正在寻找一种分层方法,将ui置于某些实体/应用程序服务之上,并位于数据库顶部的某些回购站之上。取决于你正在建设什么,这可能实际上就是你所需要的。

如果您想使用PetaPoco,并且您的“orm”从db生成“models”,那么在不同的项目中将它们分开是没有多大意义的。模型由orm生成的事实(以及它们可能需要在将来重新生成的事实)使得它们与orm相互耦合,因此在单独的程序集中移动它们并不会为您带来任何收益。

要回答你的ValidateLogin问题,我建议将所有auth相关的代码移动到与其他层正交(垂直)的基础结构层。应用程序用户不一定需要成为“实体”。您也可以在处理auth的模型层中拥有应用服务,但我通常认为auth是基础设施问题,而不是业务问题。

最后,我建议你熟悉这种架构的陷阱和优点,然后决定它是否适合你正在构建的东西。另一方面,你需要知道DDD的构建起来并不便宜,并且(正如Evand先生所说的),你可能不会在前几次得到正确的结果。

+0

谢谢。如果我忽略ORM并使用LINQ会怎么样?我是否需要创建登录界面? – RKh

+0

这并不重要。首先,您需要确定登录过程是否属于您的业务流程的一部分,仅仅是一个基础设施问题。如果它是业务流程的一部分,那么您将拥有一个用户实体和一个能够执行验证/认证的应用服务。如果这是一个基础设施问题,那么你需要一个基础设施组件。 –