【问题标题】:Decoupling business logic from data source将业务逻辑与数据源解耦
【发布时间】:2012-12-14 05:25:50
【问题描述】:

我有一个依赖于 dll(名为 datalib)的应用程序,旨在以 xml 格式存储数据。

我的应用程序和那个 dll 之间有一对紧密的关系。

我的应用程序以这种方式使用该 dll 检索数据的所有代码:

var data = datalib.Parameters.HostAddress;

我希望我的应用能够替换数据源(例如 SQL Server 数据库)。

不幸的是,我的应用程序在其业务逻辑中将强类型对象从 datalib 传送到紧密依赖 datalib 的其他模块。

在我的情况下,有哪些可能的方式来实现数据源的替换能力?我是否需要创建自己的域层,并能够将其实体映射到 datalib 的实体?

【问题讨论】:

    标签: design-patterns architecture decoupling


    【解决方案1】:

    建议从以下链接和其他地方阅读这些概念:

    1. Repository Pattern
    2. Data Mapper

    本质上,您希望围绕外部数据访问库 (datalib.dll) 实现松散耦合。这可以通过多种方式实现 - 从简单的 DataAccess 类到更具扩展性的 Repository 类型工厂类。

    您必须根据每种方法的成本与收益做出选择。 希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      据我了解 数据源需要动态配置,并且应该被datalib使用

      1. 编写一个独立程序,读取配置文件获取数据源。

      2. 测试该程序以查看它是否可以访问不同的数据源。 该方法可以返回一个 DataSource(在 Java 中。对语言不太了解)

      3. 修改datalib以更改代码以访问您在步骤2中编写的程序。

      通过这种方式,我们不会破坏任何合同数据库和应用程序中的调用点,并且您可以实现一些解耦。

      【讨论】:

      • 您帖子中的 datalib 实体是什么? datalib 目前如何访问数据源?是否在某处硬编码?
      • 是的。 Datalib 是一个以 xml 格式写入数据的 dll。加密文件并解密。它是硬编码的,我没有机会说服开发人员以某种方式更改 datalib。
      • 我不知道如何在不修改 Datalib 中硬编码的内容的情况下将数据源外部化或替换当前数据源。
      • 例如,我可以开发自己的域,并有机会将我的实体映射到 datalib 实体并开发数据访问层,该层将从数据源检索数据(DAL 可以在接口上找到,因此我将拥有能够用数据库替换 datalib 并将数据映射到我的域实体中。
      猜你喜欢
      • 2011-04-30
      • 1970-01-01
      • 2011-03-05
      • 2010-12-04
      • 2019-01-22
      • 2018-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多