- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建 n 层应用程序架构。不同的层对彼此的内部实现一无所知,层之间的通信通过非常狭窄的接口(interface)处理,并辅以 IoC/DI。
现在我将业务对象(在业务层中定义)传递给数据层。业务层本身不知道数据实际保存的方式和位置(通常是数据库,但业务层不应该知道)。业务对象通过 IDataReader 的实现传递到数据层(这种方法还支持在 future 场景中批量加载数据)。数据层从 IDataReader 读取所有数据并调用一些存储过程将数据保存到数据库(如果保存一个对象,则 IDataReader 返回“一行”)。
实际问题在这里:
因为我只是将 IDataReader 传递给数据层并将数据与其类型断开连接,所以在这种情况下确定数据位置的最佳方法是什么?
例如,如果我将“用户”类型的实际业务对象传递给数据层,那么数据层应该将数据保存到表“用户”中。在其他一些情况下,数据可能会独立于业务层中的类型保存到一些不同的结构中。
在当前的实现中,我将业务对象的类型信息传递到数据层,数据层检查这种类型并决定数据的放置位置。
数据层检查传入数据并确定其位置是正确的解决方案,还是数据层应该公开可以保存数据的“位置”列表(枚举?)?
提前致谢!
/澄清 :
我在这里看到的选项是:
1.数据层给出可以保存数据的“plces”列表
2. 数据层检查给定的参数(如类型 arg)并决定存储数据的位置
第一选择惩罚;如果我尝试将“产品”类型的业务对象存储到“用户”类型通常使用的结构中怎么办?
第二选择罚分;我必须将类型“Namespace1.Namespace2.User”映射到将其数据保存到表“User”的特定例程。所以手动为每种类型做一些映射......
/澄清2:
现在我确实像这样检索:
service.Retrieve(typeof(Catalog), null, catalogArgs, e => catalogConverter.Read(e));
[TypeAdapterAttribute("Namespace1.Namespace2.Catalog, and assembly info...")]
class CatalogAdapter { ... }
最佳答案
我建议您使用 ORM( Entity Framework ,NHibernate)或微 ORM(PetaPoco,Dapper)将您的对象映射到数据存储。
如果您有具体问题,请查看并拍摄。
更新:我想我刚刚得到了你的要求。
您需要在数据层中为每种类型定义一个新方法。
所以:
public User GetUserById(int id);
public void SaveUser(User user);
public Product GetProductById(int id);
public void SaveProduct(Product product);
关于c# - 如何将对象类型从业务层传递到数据层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9761569/
我是一名优秀的程序员,十分优秀!