我们一直在使用松耦合和依赖注入来开发代码。
许多“服务”样式的类都有一个构造函数和一个实现接口的方法。每个单独的类在孤立状态下非常容易理解。
然而,由于耦合度较低,只看一个类并不能告诉你它周围的类或者它在更大的框架中的位置。
在Eclipse中跳转到协作者也不容易,因为你必须通过接口来进行。如果接口是Runnable
,这对于找出实际插入的类没有任何帮助。实际上,需要返回DI容器定义并从那里尝试搞清楚事情。
这里是一行来自依赖注入服务类的代码:
// myExpiryCutoffDateService was injected,
Date cutoff = myExpiryCutoffDateService.get();
这里的耦合性非常松散。到期日期可以用任何方式实现。
以下是在更紧密耦合的应用程序中可能看起来像什么。
ExpiryDateService = new ExpiryDateService();
Date cutoff = getCutoffDate( databaseConnection, paymentInstrument );
从紧密耦合的版本中,我可以推断出截止日期是通过使用数据库连接从支付工具中确定的。
相比第二种风格的代码,我发现第一种风格的代码更难理解。
你可能会说,在阅读这个类时,我不需要知道如何计算截止日期。这是正确的,但如果我正在调试错误或确定增强功能的位置,那么了解这些信息是有用的。
还有其他人遇到这个问题吗?你们都采取了什么解决方案?这只是需要适应的问题吗?是否有任何工具可以可视化类之间的连接方式?我应该使类更大还是更紧密耦合?
(我刻意让这个问题与容器无关,因为我对任何答案感兴趣。)