我有一个关于 n 层架构的问题。在问这个问题之前,我想了很久,因为这里已经有很多类似的问题了……但是,在看了一天半并阅读了其他答案之后,我仍然不确定。各种看似相似的术语和不同的方法让我感到困惑。
如果我在不同的类库中有一个 BLL 和一个 DAL,则 BLL 和 DAL 之间通信的一种方法是利用一个接口,有点像在另一个单独的 DLL 中定义的 DTO,该 DLL 被 BLL 和 DAL 引用。 BLL 中的域模型实体将实现此接口,DAL 中的任何 ORM 生成的对象也将实现此接口。为了保存我的业务实体,我可以将它们传递给 DAL,DAL 会很好地接受它们,因为它们实现了共享接口。我还可以将对象传递回实现此接口的 BLL。这似乎是合理的,因为 BLL 和 DAL 都只需要了解基本接口,而不需要了解彼此的具体实现。
我的问题是在另一侧创建对象的最佳方法是什么?例如,如果我在 BLL 中有一个实现 IPerson 的 Person 对象,并且在 DLL 中有一个 PersonDataObject 或其他也实现 IPerson 的对象,那么我将 Person 传递给 DAL 中的一个方法,该方法采用 IPerson 参数,然后在 DAL 中我' d 必须重建 PersonDataObject 才能持久保存。这是最好的方法吗?
抱歉,我可能没有很好地解释这一点,因为我很困惑。对于傻瓜答案的最佳实践将不胜感激。
一般来说,BLL 中的对象将使用接口 - 而不是实现它们:
例如,如果我有一个 Person 对象
在实现 IPerson 的 BLL 中,
和一个 PersonDataObject 或任何东西
也实现 IPerson 的 DLL
以“人”为例:考虑与一个人相关的不同数据操作(获取单个人的所有数据、许多人的浅层数据集合、CRUD操作、搜索等) - 然后设计接口逻辑分组(参见接口隔离原则 http://en.wikipedia.org/wiki/Interface_segregation_principle).
这些接口可能代表以 BL 为中心的视角的操作,或者基于“服务”的视角。
无论如何,回答你的具体问题......
我在通用程序集中定义了 DTO 的等价物,并在单独的程序集中定义了数据接口 - 所以我有 4 个程序集:BL、数据访问接口定义、接口实现和通用;所有程序集都引用公共程序集。
我在 C#.Net 中工作,我将 DTO 定义为结构(但您可以使用类);并且它们的所有属性都是只读的 - 您可以在构造函数中将数据输入到它们中 - 这样 DTO 实际上是信息的“哑”信封。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)