昨天,我在我的一个游乐场项目中实现了一个简单的类作为 IOC 容器(不太像那样),一些专业人士告诉我,在测试代码时会遇到一些问题(太紧张了,无法分享到底是什么)问题 !!)
虽然我自己总是使用 IOC 框架,但我想知道为什么这种方法是不好的?
我什至使用这种方法编写了许多测试(使用模拟框架)并且从未遇到过问题。
我想要你关于这个设计问题的想法:
public class IocContainer{
private static IocContainer instance;
private IocContainer(){
}
public static IocContainer getInstance()
{
if(instance == null){
instance = new IocContainer();
}
return instance;
}
public ChatPresenter getChatPresenter(ChatView chatView)
{
return new ChatPresenterImpl(chatView, getChatRepo() , getMessagingService());
}
private ChatRepo getChatRepo()
{
return new ChatRepoImpl(getDbHelper(), getRemoteService());
}
private MessagingService getMessagingService()
{
return new MessagingServiceImpl()
}
private DbHelper getDbHelper()
{
return new DbHelperImpl();
}
private RemoteService getRemoteService()
{
return new RemoteServiceImpl();
}
}
如您所见,我仅使 getChatPresenter 可访问,并且在我的视图中像下面这样使用它,并且效果很好。
ChatPresenter presenter = IocContainer.getInstance().getChatPresenter(this)
代码在没有任何紧密耦合的情况下处理控制反转(使用接口)。
我想知道这种方法有什么问题吗?(我想从技术角度得到答案,因为我已经知道使用 Ioc 容器库更容易具有更多功能,例如范围等......)
实际上我想知道这种方法将来会带来什么问题和限制?
残忍地杀了我 :D