我有一个关于N层架构的问题。在问这个问题之前,我想长时间思考,因为这里已经有很多类似的问题……但是,经过一天半的看来,阅读了这些其他答案,我仍然不确定。我感到困惑的各种看似相似的术语和不同的方法。

如果我在不同的类库中有一个BLL和DAL,则在BLL和DAL之间进行通信的一种方法是使用界面,就像在BLL和DAL所引用的另一个单独的DLL中定义的DTO一样。我的BLL中的域模型实体将实现此界面,并且DAL中的任何ORM生成的对象也会如此。为了保存我的业务实体,我可以将它们传递给DAL,因为它们实现了共享界面,因此可以接受它们。我还可以将对象传递回实现此接口的BLL。这似乎是合理的,因为BLL和DAL都只需要了解基本接口,而不是彼此的具体实现。

我的问题是,在另一侧创建对象的最佳方法是什么?例如,如果我在BLL中有一个人的对象,可以实现IPSORSON,persondataObject或DLL中也实现IPSORSON的任何内容,我将人转移到DAL中的一种方法,该方法采用了IPERSON的参数,然后在DAL I'中使用。 d必须重建一个持久的persondataObject。这甚至是最好的方法吗?

抱歉,我可能没有很好地解释这一点,因为我很困惑。假人答案的最佳做法将不胜感激。

有帮助吗?

解决方案

一般而言,BLL中的对象将消耗界面 - 不要实现它们:

例如,如果我在BLL中有一个人对象,则可以实现IPSORSON,并且PersondataObject或DLL中的任何内容也可以实现IPSORSON

以“人”为例:考虑与某人相关的不同数据操作(获取单个人的所有数据,许多人的浅数据集,CRUD操作,搜索等) - 然后沿着设计接口逻辑分组(请参阅 接口Segeragtion原理).

这些接口可能从BL中心的角度代表操作 - 或基于“服务”的操作。

无论如何,要回答您的特定问题...

我在公共组件中定义了与DTO相当的等效词,并且在单独的组件中定义了数据接口 - 因此我有4个组件:BL,数据访问Inteface Inteface定义,接口实现和常见;所有组装都引用了通用的组件。

我在C#.NET中工作,将DTO定义为结构(但您可以使用类);并且它们的所有属性均已阅读 - 您在构造函数中馈送数据 - 这样的方式,DTO确实是“愚蠢”的信息信封。

其他提示

在遵循N层体系结构时,很常见的是在BL和DAL之间共享数据对象。有时,同一数据对象也可以在UI层中使用。

通常,我有一个数据模型(或数据对象或域模型,无论您命名如何),该组件将所有模型对象都作为接口。以您的人物为例,我将在模型组件中创建一个iPeople界面。 DAL将将iPeople的实例返回到BL。 BL将消耗此实例,如果需要,则在应用业务逻辑后将其传递到UI层。

Google用于域驱动设计和存储库模式。它像您朝着您的体系结构朝那个方向前进,具体取决于场景需要它,我将在更复杂的代码上使用这种方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top