我正在从头开始研究一个小型应用程序,并使用它来尝试自学建筑和设计概念。它是.NET 3.5,WPF应用程序,我将SQL Compact Edition用作数据存储。

我正在研究业务逻辑层,现在刚刚开始编写DAL。我只是使用sqlcecomamnds发送简单查询和sqlcereSultSet以获取结果。我开始设计自己的插入和更新方法,这是问题 - 我不知道将BLL获取必要数据进入DAL的最佳方法。我会通过通用系列吗?我是否有一个大量参数列表,其中包含数据库的所有数据?我是否只需传递实际的业务对象(从而将我的dal绑在BLL中的引用的东西?)。

我考虑过使用界面 - 简单地将ibusinessobjecta传递到DAL中,这提供了我想要的简单性,而不将我紧密地与当前的实现紧密联系在一起。你们有什么感想?

有帮助吗?

解决方案

如果我处于您的位置,我可能会使用LINQ来定义我的数据访问层 - 它可以为您节省大量的工作,以维护所有SQLCEFOOBAR东西,并为您提供(类别)的设计师,以维护您的数据库。否则将缺乏使用SQL CE。

因此,在这种情况下,我可能会将业务逻辑层非常紧密地与L2S层暴露的实体相结合。理由是实体 业务对象,尽管没有任何服务。

不过,我可能不会让这些实体能够像UI那样延伸到层次结构。在这个级别上,专门为视图使用模型更有意义 - 尤其是考虑到您正在使用WPF。

当然,所有这些都取决于应用程序的大小和复杂性。我假设这是一个相当小的规模应用程序(单用户?),鉴于您使用的是SQL CE。

其他提示

我认为您的问题没有一个简单的答案,因为根据情况有很多选择。我发现阅读下面的两本书以帮助我了解您描述的问题更好。

  • MS .NET:企业的架构应用程序(Esposito,Saltarello)
  • MS应用程序体系结构指南,第二版。

第二本书可在线提供。看 这里.

我认为可以将业务对象传递到数据访问层。我认为BLL的工作只是使用其对象,检查是否遵循所有规则,可以保存的内容,由谁,在什么字段,时间,时间等上进行。

一旦完成,它应该将其传递给DAL,我认为弄清楚如何将其转换为可以持续存在的东西是工作它只会做。这可能是直接的foward,la linq,但是如果您的逻辑MDOEL与数据模型1:1不匹配,则DAL应该执行所有转换。

关于将您的DAL与BLL中的东西联系在一起,我认为您应该担心相反的方式,将BLL与DAL联系在一起。我将使用接口来表示您的dal(如irepository),您可以通过更改它使用的iRepository的类型来使BLL调用任何类型的持久机制(如果使用IOC:P)。实施Irepository的具体类将与业务对象相关,但是他们必须知道他们在保存的是什么,不是吗?虽然BLL不必知道在做什么储蓄。

在DAL中通过业务对象是更简单,最快的方法。它在小型项目中起作用,但缺点相同:

1)业务对象是BLL层的一部分,如果您通过BLL中的对象,则DAL将成为BLL的依赖。低层知道上层 - 这完全与层的概念相矛盾。

2)业务对象通常非常复杂,可以将其直接保存在BD中。在这种情况下,最好引入新的“映射”中间层。

为了克服所有这些问题,我通常会与DAL独立于业务对象进行界面。我改用“行”类 - 数据库或XML中一个记录的表示。在.NET 3.5 linqtosql自动化类可用于此目的。

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