2

我们的应用程序为另一个系统提供了一个用户界面,该系统的数据模式不在我们的控制范围内。我们的应用程序使用 CSLA 创建业务对象以允许在第三方系统中编辑数据。然而,随着第三方数据模式的发展,我们必须随之发展。但是,在任何给定时间,我们的客户都可以拥有具有不同数据模式的任何版本的第三方系统。因此,我们的应用程序需要能够适应客户碰巧拥有的任何受支持的模式版本。

我们已经研究过可能使用策略模式来解决这个问题。本质上具有支持最低版本数据模式的基类,然后具有支持每个后续版本的派生类。反过来,我们将有一个工厂,它返回与当前版本的数据模式相对应的类。然而,我们担心这可能会导致一个长而混乱的继承链。有没有更好的方法来解决这个问题?可能使用组合而不是继承?

我发现这篇文章概述了处理此 http://securesoftwaredev.com/2009/05/31/supporting-multiple-versions-of-a-data-model/的可能方法

我不确定这种方法是否适合我们,但我想在实施任何东西之前获得一些其他的想法。

4

2 回答 2

2

CSLA .NET 使您可以轻松地将数据访问逻辑 (DAL) 与应用程序的其余部分分开。

因为您应该使用 CSLA 创建映射到问题域而不是数据库形状的业务对象,所以您的 DAL 应该关注访问数据库并将数据映射到必要的业务对象。

如果您有两个不同的数据库模式,那么您可能会有两个 DAL 实现,它们都访问数据库并将数据映射到完全相同的业务类型。

Using CSLA 4: Data Access电子书对此进行了相当广泛的介绍,ProjectTracker 示例(4.0 版及更高版本)也使用了一个抽象 DAL 来演示该概念。

于 2013-02-11T06:37:32.850 回答
0

我会看看使用带有可插入 DAL 层的工厂实现。通常,您可以利用这一点来支持不同的数据库服务器或模拟数据以进行单元测试,但支持不同的数据模型也可以。

于 2013-01-30T04:57:56.080 回答