【发布时间】:2014-04-20 20:15:36
【问题描述】:
我正在构建一个用于清理物理地址的服务。我有一个 API 包,其中包含一个带有清理方法的接口。此方法将采用原始地址数据列表。然后,我将有一个实现包来实现 cleanse 方法并公开服务。然后,客户端包将依赖于 API 包并引用公开的服务。我正在努力找出“最好”的方法来做到这一点。我正在考虑两种选择:
选项 1:
API 包有一个 RawAddress 值类。这意味着我在 API 包中有一个具体的类,我认为这在 OSGI 世界中是不受欢迎的,或者至少不是最佳实践(参见 Is separate OSGI bundles for api and implementation common practice? - 特别是 Neil 对已接受答案的评论)。
从客户的角度来看:
List<RawAddress> rawAddresses = new ArrayList<>();
for(...) {
RawAddress address = new RawAddress(addrLine, city, state, zip);
rawAddresses.add(address);
}
List<CleanAddress> cleanAddresses = addressService.cleanse(rawAddresses);
选项 2:
RawAddress 是 API 包中的一个接口。 AddressService 对象将具有用于创建实现 RawAddress 的对象的附加方法。这使得 API 包“纯粹”,但也感觉它可能有点矫枉过正。
从客户的角度来看:
List<RawAddress> rawAddresses = new ArrayList<>();
for(...) {
RawAddress address = addressService.newRawAddress(addrLine, city, state, zip);
rawAddresses.add(address);
}
List<CleanAddress> cleanAddresses = addressService.cleanse(rawAddresses);
我觉得我在想这个和/或我错过了一些更好的解决方案。有什么想法吗?
【问题讨论】: