【问题标题】:java hide implementing class details between two layersjava隐藏两层之间的实现类细节
【发布时间】:2013-03-19 09:48:26
【问题描述】:

我正在构建一个具有业务逻辑层的应用程序,它需要访问 DAO 层以获取所有与数据库相关的内容。我的要求是 DAOImpl 类可以不断变化,因此我正在寻找在我的业务逻辑类中获取 DAOImpl 类句柄的方法,而无需知道实际的 DAOImpl 类。有什么办法可以在 Java 中实现这一点?

【问题讨论】:

  • 只是为了补充问题,在任何给定时间点,只会使用一个 DAOImpl 类。

标签: java interface implementation decouple


【解决方案1】:

DAOImpl 类应该实现一个接口DAOLayer(比如说)。您的 businessLogic 类应该由一个 DAOLayer 对象组成。

class BusinessLogic
{
    /// ...

    DAOLayer daoLayer;

    public BusinessLogic(DAOLayer daoLayer)
    {
        this.daoLayer = daoLayer;
    }

    /// ...
}

class DAOImpl implements DAOLayer
{
    /// ...
}

您应该在创建BusinessLogic 类对象时传递DAOLayer 的实际实现。

类似于以下:

DAOLayer aDaoLayer = new DAOImpl();
BusinessLogic bl = new BusinessLogic(aDaoLayer);

    public BusinessLogic()
    {
        this.daoLayer = DAOFactory.create(true);
    }

class DAOFactory
{
    public static DAOLayer create(bool isDB)
    {
        DAOLayer aDao;

        if(isDB)
        {
            aDao = // create for DB
        }
        else
        {
            aDao = // create for file
        }

        return aDao;
    }
}

【讨论】:

  • 我知道了,但是 BusinessLogic 构造函数将如何获得 DAOImpl 对象的句柄。我必须输入类似的东西 - this.daoLayer = new DAOImpl();这将特定于当前的 DAOImpl 实现。
  • 查看编辑。在BusinessLogic 内不应创建与DAO 相关的对象。或者你也可以使用工厂模式。
【解决方案2】:

您的业务逻辑应该只处理 DAO interfaces,这将隐藏实际的实施。

为了能够快速更改实现类,看看IoC容器,例如Spring

【讨论】:

    【解决方案3】:

    听起来你想使用interface,这是java将实现与所需行为解耦的基本方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-09
      • 2018-02-12
      • 2017-12-25
      • 1970-01-01
      • 1970-01-01
      • 2017-12-20
      • 1970-01-01
      相关资源
      最近更新 更多