繁体   English   中英

解耦项目引用和依赖注入

[英]Decoupling Project reference and Dependency Injection

所以我有如下挑战。

我有gradle项目结构。

  • 主要项目

    - 一种。 Android(#Sub-Project 1)
    - b。 下议院(#子项目2)
    - C。 Http-Comms(#子项目3)

总结我有上面的3个项目。 HTTP-Comms必须是独立的,它依赖于Commons项目。 HTTP-Comms有一个接口和实现器,它公开了启动和停止服务器的方法。 问题是我在Android有一个HTTP-Comms项目的参考,并希望解耦这个。 因此,正常构建可以在没有此功能的情况下运行并且开发人员构建将使用此功能运行。 如果我不将此项目包含在正常构建的分发中,Android将因ClassNotFound而失败。

简要说明现在,这个HTTP-Comms project有一个NanoHttpdServer实现,并且有许多类引用与服务器和其他实用程序类相关的库。 它独立于自己。 我们有一个接口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 project ,其中包含启动和停止服务器的操作按钮。 所以这取决于HTTP-Comms项目。 我在这做

IhttpComms comms = new Controller();

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

可以引用Commons project并且应该在这些项目之间具有共同代码。 But Commons project cannot hold reference to HTTP-COMMS

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

我的问题是......

  1. 我可以使用任何依赖注入framewroks,我将能够在项目外注入依赖对象。 ?? 喜欢有一个Controller实例并注入Android?

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

问题是IhttpComms及其实现都在同一个项目/ jar中。 我会将IhttpComms移动到它自己的项目中,并让Android项目引用这个新项目,该项目应该只有Interfaces和Abstract类。 这样你就可以将你的Android项目与Http-Comms中的具体类分开。 然后你可以自由地使用你喜欢的任何IhttpComms实现,并在运行时使用(你猜对了)一个DI框架甚至简单的Class.forName加载它

总结一下:

  1. IHttp-Comms:新项目只接口,没有依赖
  2. Android(#Sub-Project 1)依赖于IHttp-Comms
  3. 下议院(#子项目2)
  4. Http-Comms(#Sub-Project 3),依赖于IHttp-Comms和Commons的IHttp-Comms实现(具体类)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM