gpt4 book ai didi

java - 解耦项目引用和依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-02 14:37:46 25 4
gpt4 key购买 nike

所以我面临如下挑战。

我有 gradle 项目结构。

  • 主要项目

    --a. Android(#子项目1)
    --b.共享资源(#子项目2)
    - C。 Http-Comms(#Sub-Project 3)

摘要我有一个如上所述的3个项目。 HTTP-Comms 必须是独立的,它依赖于 Commons 项目。 HTTP-Comms 有一个接口(interface)和实现器,它公开了启动和停止服务器的方法。问题是我有 AndroidHTTP-Comms 项目的引用,并且想要将其解耦。因此,普通构建可以在没有此功能的情况下运行,而开发人员构建将在此功能的情况下运行。如果我不将该项目包含在正常构建的发行版中,Android 将因 ClassNotFound 而失败..

简要说明现在这个 HTTP-Comms 项目有一个 NanoHttpdServer 实现,并且有许多类引用与服务器和其他实用程序类相关的库。它是独立的。我们有一个接口(interface) IHttpComms,它有启动和停止服务器的方法

interface IHttpComms{
public void startServer();
public void stopServer();
public void serveRequest();
}

class Controller implements IhttpComms{

//Implements the feature
// reference to other classes in the HTTP-Comms project.

}

现在还有另一个 Android 项目,其中有用于启动和停止服务器的操作按钮。所以这取决于 HTTP-Comms 项目。我在这里做

IhttpComms comms = new Controller();

因此在 HTTP-Comms 和 Android 项目之间建立了紧密的耦合。

可以引用Commons项目,并且这些项目之间应该有公共(public)代码。 但是 Commons 项目无法保存对 HTTP-COMMS 的引用

现在,由于 HTTP-Comms 对我们来说是一个孵化功能,因此我们有时要求它不要成为构建过程的一部分。

我的问题是...

  1. 我可以使用任何依赖注入(inject)框架吗,并且我仍然能够在项目外部注入(inject)依赖对象。?喜欢拥有一个 Controller 实例并注入(inject)到 Android 中吗?

  2. 没有 DI 框架..还有其他设计模式解决方案吗?

最佳答案

问题是 IhttpComms 及其实现都在同一个项目/jar 中。我会将 IhttpComms 移动到它自己的项目中,并让 Android 项目引用这个新项目,该项目应该只包含接口(interface)和抽象类。通过这种方式,您可以将 Android 项目与 Http-Comms 中的具体类解耦。然后你可以自由地使用你喜欢的 IhttpComms 的任何实现,并在运行时使用(你猜对了)DI 框架甚至简单的 Class.forName 来加载它

总结:

  1. IHttp-Comms:新项目仅接口(interface),无依赖项
  2. Android(#Sub-Project 1) 对 IHttp-Comms 的依赖
  3. Commons(#子项目 2)
  4. Http-Comms(#Sub-Project 3) ,依赖于 IHttp-Comms 和 Commons 的 IHttp-Comms 实现(具体类)

关于java - 解耦项目引用和依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35899736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com