Mat*_*t B 2 architecture orm data-access-layer bll n-layer
我有一个关于n层架构的问题.在问这个问题之前,我想了很久很久,因为这里已经有很多类似的问题......然而,经过一天半的时间看着它并阅读其他答案后,我仍然不确定.各种看似相似的术语和不同的方法令我感到困惑.
如果我在不同的类库中有一个BLL和一个DAL,BLL和DAL之间进行通信的一种方法是利用一个接口,有点像在另一个由BLL和DAL引用的单独DLL中定义的DTO.我在BLL中的域模型实体将实现此接口,因此DAL中的任何ORM生成对象也将实现此接口.为了保存我的业务实体,我可以将它们传递给DAL,它可以接受它们,因为它们实现了共享接口.我还可以将对象传递回实现此接口的BLL.这似乎是合理的,因为BLL和DAL只需要知道基本接口,而不是每个其他具体实现.
我的问题是在另一边创建对象的最佳方法是什么?例如,如果我在BLL中实现了一个实现IPerson的Person对象,以及一个PersonDataObject或同样实现IPerson的DLL中的任何东西,我将Person传递给DAL中的一个方法,该方法接受IPerson的参数,然后在DAL I'中d必须重建PersonDataObject才能持久化.这甚至是最好的方法吗?
对不起,我可能没有解释得太好,因为我很困惑.对于假人答案的最佳做法将非常感激.
一般来说,BLL中的对象将使用接口 - 而不是实现它们:
例如,如果我在BLL中有一个实现IPerson的Person对象,以及一个PersonDataObject或DLL中的任何实现IPerson的东西
以"人"为例:考虑与人相关的不同数据操作(获取单个人的所有数据,为许多人提供浅层数据,CRUD操作,搜索等) - 然后设计接口逻辑分组(参见接口Segeragtion原理).
接口可以表示来自BL中心视角的操作 - 或者基于"服务"的操作.
无论如何,要回答你的具体问题......
我在公共程序集中定义了我的等效DTO,在单独的一个中定义了数据接口 - 所以我有4个程序集:BL,数据访问接口定义,接口实现和通用; 所有程序集都引用了通用程序集
我在C#.Net工作,我将DTO定义为结构(但你可以使用类); 并且它们的所有属性都是只读的 - 你在构造函数中将数据提供给它们 - 这样DTO就是有效的"哑"信息包络.
| 归档时间: |
|
| 查看次数: |
2696 次 |
| 最近记录: |