一个看似简单的架构/设计问题:
我们的 Java 应用程序依赖于第三方代码。然而,这个第三方代码做了一些我不喜欢的事情(将时区设置为 GMT;我想根据应用程序的 TimeZoneID 以不同的方式设置时区)。我有什么选择?
1-我不能简单地扩展第三方类并覆盖不需要的行为,因为在我们的应用程序中到处都有第三方类的调用者(这是我们继承应用程序的方式)。
2-也许过于侵入性的解决方案是编写我们自己的第三方代码的等效项并依赖它。但是,这可能太多了,也太具有侵略性了。
3-我研究了一点Spring AOP(和aspectJ)的东西来进行加载时编织。我没有深入研究它,但在我看来,由于第三方代码调用 java.util.Timezone.setDefault(GMTTimeZone); (而不是调用我们自己编写/管理的类)这不是那么容易完成的。我在这里可能是错的,也许我仍然可以绕过 java.util.Timezone.setDefault()。请告诉我这是否属实,这几乎是我的(唯一的)解决方案。
4-我是否遗漏了一些东西,或者这几乎是所有可用的选项?
首先,您可以联系第三方并要求他们更改代码。这并不像你想象的那么长。这会惹恼你,也可能惹恼他们的其他客户。
另外,您可以仅使用子类作为代码的代理。您项目中的其他人不一定必须使用您的子类。您可以清除不需要的行为并将更改从代码中抽象出来。当要求供应商更改行为时,您也可以将此代码发送给供应商!
最后,最简单的解决方案是仅获取返回值并在线修复它。这是现在完成任务的最快方法,但这不是一个值得遵循的好模式,因为您引入的代码仅用于解决其他人的问题。
| 归档时间: |
|
| 查看次数: |
2481 次 |
| 最近记录: |