Java 解耦项目引用和依赖项注入
所以我的挑战如下 我有gradle项目结构Java 解耦项目引用和依赖项注入,java,oop,design-patterns,dependency-injection,Java,Oop,Design Patterns,Dependency Injection,所以我的挑战如下 我有gradle项目结构 主要项目 --a。Android(#子项目1) --b。公共设施(子项目2) --c。Http通信(子项目3) 摘要 我有3个以上的项目HTTP通信必须是独立的,它依赖于Commons项目。HTTP Comms有一个接口和实现程序,它公开了启动和停止服务器的方法。问题是我在Android中有一个httpcomms项目的参考,我想将其解耦。因此,正常构建可以在不使用此功能的情况下运行,而开发人员构建将在使用此功能的情况下运行。如果我不将这个项目包含在
- 主要项目
--a。Android(#子项目1)
--b。公共设施(子项目2)
--c。Http通信(子项目3)
HTTP通信必须是独立的,它依赖于Commons
项目。HTTP Comms有一个接口和实现程序,它公开了启动和停止服务器的方法。问题是我在Android
中有一个httpcomms
项目的参考,我想将其解耦。因此,正常构建可以在不使用此功能的情况下运行,而开发人员构建将在使用此功能的情况下运行。如果我不将这个项目包含在正常构建的发行版中,Android将因为ClassNotFound而失败
简要说明
现在,这个httpcomms项目有一个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项目
,它有启动和停止服务器的操作按钮。所以它取决于httpcomms
project。我在这里做什么
IhttpComms comms = new Controller();
因此,在HTTP通信和Android项目之间实现了紧密耦合
其中asCommons项目
可以引用,并且这些项目之间应该有公共代码但Commons项目无法保留对HTTP-COMMS的引用
现在,由于HTTP通信对我们来说是一个酝酿中的特性,我们要求它在某些时候不成为构建过程的一部分
我的问题是
我可以使用任何依赖项注入框架吗?我仍然能够在项目外部注入依赖项对象。??比如有一个Controller实例并注入到Android
没有DI框架。。还有其他设计模式解决方案吗
问题是IHTTPComm及其实现都在同一个项目/jar中。我会将IhttpComms移动到它自己的项目中,并让Android项目引用这个新项目,它应该只有接口和抽象类。通过这种方式,您可以将Android项目与Http通信中的具体类解耦。然后,您可以自由地使用您喜欢的IHTTPComm的任何实现,并在运行时使用(您猜得到的)DI框架甚至谦逊的Class.forName加载它
总结如下:
IHttp通信:仅新项目接口,无依赖项
Android(#子项目1)对IHttp通信的依赖性
公共设施(子项目2)
Http通信(#子项目3),IHttp通信实现(具体类),依赖于IHttp通信和Commons
这个安卓项目是驱动程序项目吗?我的意思是,它是独自运行还是主项目是驱动程序项目,它使用android one?@Erkan主项目有等级脚本,可以按要求的顺序运行任务。。android和http comms项目中都使用了common项目