![](/img/trans.png)
[英]Decoupling in Class and in Project other than IoC & Dependency Injection (java)
[英]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对我们来说是一个孵化功能,我们要求它在某些时候不要成为构建过程的一部分。
我的问题是......
我可以使用任何依赖注入framewroks,我将能够在项目外注入依赖对象。 ?? 喜欢有一个Controller实例并注入Android?
没有DI框架..任何其他设计模式解决方案?
问题是IhttpComms及其实现都在同一个项目/ jar中。 我会将IhttpComms移动到它自己的项目中,并让Android项目引用这个新项目,该项目应该只有Interfaces和Abstract类。 这样你就可以将你的Android项目与Http-Comms中的具体类分开。 然后你可以自由地使用你喜欢的任何IhttpComms实现,并在运行时使用(你猜对了)一个DI框架甚至简单的Class.forName加载它
总结一下:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.