c# - 业务对象和数据层

标签 c# visual-studio-2008 data-access-layer n-tier-architecture

该站点为我提供了许多有用的答案,但是经过几个小时的搜索后,我没有找到任何特别满足我需求的内容。所以这里...

我工作的公司正在设计一个新的业务对象层和一个数据访问层——它们将驻留在单独的程序集中。

问题是我很难理解这两层之间的交互——具体来说,如果 DAL 知道 BOL,我读过很多文章,这些文章说依赖顺序应该是这样的这个:

GUI/演示 --> BOL ---> DAL

但据我所知,DAL 需要引用 BOL 才能将对象“返回”到 BOL 层。

我打算在 BOL 和 DAL 之间建立一个中间组件,它基本上是一个薄层,其中填充了用于分离这两个 DLL 的接口(interface),因此该框架可以在需要时使用不同的 DAL。

这让我想到引入另一个薄层,其中包含 BO 实现的一堆接口(interface),然后当 BOL 调用 DAL 接口(interface)时,它传递给它一个实现这些 BO 接口(interface)之一的对象,然后 DAL 继续填充对象。这消除了 BOL 和 DAL 之间的所有依赖关系——但是,老实说,我发现很难证明它是合理的。

理想情况下,我们希望使用 ORM,因为它只是消除了编写 CRUD 内容的需要,但我们的客户习惯于摆弄他们数据库中的列长度,这是我们迄今为止使用的大多数错误的原因强类型数据表。我听说 Linq2SQL 也在编译时存储列长度,不确定 NHibernate 是否这样做(但是,我不确定我们的数据库模式是否为 NHibernate 设计得足够干净,处理遗留系统的陷阱)。

是的,任何关于 BOL 和 DAL 之间关系的见解都将非常受欢迎 - 如果上面写得不好,我们深表歉意,如果有人需要澄清,我很乐意提供更多细节。

马龙

最佳答案

我这样做的方式是 BO 期望 DataReaderDataContext 或从 DAL 返回的任何内容,而不是实际形成的对象。然后 BO 层的工作是从返回的对象中取出并填充自己。 DAL 不会返回已完成的 BO。要记住的主要事情是,更改 BO 层中的某些内容不应导致 DAL 层出现问题,但更改 DAL 层中的某些内容可能会导致 BO 层出现问题。

我通常做的一个简短例子

在BO层

FillData(){
   DataReader dr = DataLayer.GetData("SomePropertyForAStoreProcedure");
   If dr.Read(){
    Property1 = dr.GetValue("Property1");
    //So on and so forth
   }
}

在 DAL 中

DataReader GetData(String SPProperty){

}

关于c# - 业务对象和数据层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3710919/

相关文章:

c# - 为什么我的图片框即使显示图像也是空的?

asp.net - 从 DAL 返回什么到 BLL

web-services - UI、业务逻辑层、数据层以及放置 Web 服务的位置

c# - 在 MVVM Light 的 ViewModel 之外注册消息?

c# - 为什么我的自定义控件的文本属性不会显示在“属性”窗口中?

c# - Interop.MSXML2 抛出异常,因为它未注册但不会注册!

c++ - 奇怪的 "Entry Point Not Found"错误

visual-studio - 如何在 Visual Studio 中获得 .cu 文件的语法突出显示?

c++ - 调试时保持控制台窗口打开

.net - 为什么需要 Web 服务才能从 Silverlight 访问数据库?