C# · 12月 29, 2021

c# – 关于构造域驱动设计命名空间的一些问题

我对框架设计有一些一般性的问题.

我正在C#.NET(框架3.5)和…中构建一个iPhone应用程序的API sql 2008(使用LINQ).我已经遵循域驱动设计模式(在一本书中)和
具有以下文件夹结构:

Core- DataAccess–Impl-Domain-Impl

Core是我的核心API库 – 我的DLL.
DataAccess包含数据访问接口
DataAccess.Impl包含存储库(LINQ to DB)
域包含我的大部分数据类型和属性.
Impl包含我的服务(即AccountService.cs,EmailService.cs)

现在,作为一个练习,我已经添加了一个Windows服务到这个项目
并且正在尝试从该服务中的DLL调用功能.
我的问题是什么层应该暴露于其他应用程序
什么应该隐藏?

> Impl文件夹中的服务类应该是程序员看到的吗?
>或数据库从DataAccess.Impl?
>或者,我应该把它全部放在程序员看来吗?看起来
现在,这似乎有些混乱.

当我开始阅读有关DDD的时候,我假设存储库将是
隐藏和访问的服务类,但我发现我需要调用
功能来自我的客户端.我设计出错了吗?

我的另一个问题是与命名空间命名有关.当Windows服务
从我的核心图书馆调用功能,我必须这样做我的包括:

using Company.Product.ProductCore.Core.DataAccess.Impl using Company.Product.ProductCore.Core.Domain using Company.Product.ProductCore.Core.Impl

这看起来很冗长看看微软的DLL,他们似乎保持着两层
约定(System.Linq,System.Text等).拥有Company.Product.ProductCore.Core.Impl
似乎凌乱,并没有真正告诉程序员这个命名空间做什么(但它
是我读过的例子所建议的).这里有最好的做法吗?

你的建议(和任何例子)是非常感谢.

谢谢.

解决方法 该域名绝对不是您正在寻找的,在我看来,您的数据访问层也不是.

在我谦虚的意见中,我们还没有介绍什么是静态类,就是说,如果我们考虑使用外观设计模式来暴露你的图书馆子系统的特征和功能.

外墙设计模式解释:

> Façade Design-Pattern – (Gang of Four);
> Facade pattern (Wikipedia).

那么最后,你的代码应该做什么呢?只要公开你需要知道的内容,因为你是唯一一个了解你正在开发的系统的人.

简而言之,我经常使用Façade模式,以便我可以在外观的引擎盖下隔离我的类,实现和几个相关的子系统.让我们考虑一下我们是一家全新的汽车经销商.这个外观将是伟大的窗户,让你看到在展示室暴露的汽车.你必须想到这个外墙暴露的东西.它只暴露汽车吗?

在我看来,这个外观暴露了你可以买的汽车,借钱买,修车,买其他相关的配件等.然后这些配件是暴露的,但只有需要的.与其他项目如汽车一样.也就是说,你可能只想暴露一个接口,并且为了自己来实现,所以通过你的外观,当你返回一个ICAR或IAccessory时,你必须通过你的实现对象类实例化它们,然后返回界面实例通过您的外观.也就是说,用户不需要知道发动机下面发生了什么,但只有当他想要一辆汽车时,他才能通过您的外观进行订购.就像你不会去买马自达3到梅赛德斯奔驰.您将使用正确的外观.再次,不同的汽车经销商可能只是子系统,因此也是某种工厂.那么你会问这个外观和这个规格的外观,外观应该知道什么ICAR的实例来换取你要求它为你提供什么.

希望这有助于反正! =)