我的公司有一个与通用“前端”集成的库。我们的产品之一是简单的网络预订工作,通过我们的集成库,我们可以在多个外部系统中添加约会 - 从Microsoft Exchange和Google Calendar到EMR系统中的预约寄存器。我们在这个库中共有28个集成。
这是一个简化的示例,说明如何处理与SystemA和SystemB集成的某些时间请求。
GetTimes
的参数实际上捆绑在GetTimesParameters
对象中,但在此处显示为单独的输入参数。
要使用集成库,我们有一个简单的工厂方法,返回一个ImplementationBase
对象和一个扩展库,将ImplementationBase对象转换为不同的接口:
// Create ImplementationBase object
var implementation = ImplementationFactory.Create(ImplementationEnum.SystemA);
// Set implementation connection data
implementation.SetConnection("...");
// Get an ITime object
var timeImplementation = implementation.AsTime();
// Get the times from today and two days forward
var times = timeImplementation.GetTimes(DateTime.Today, DateTime.Today.AddDays(2));
如果实现未实现接口,则AsTime()
扩展方法会抛出特定异常。
这已经足够好了,但是维护起来有点困难。
简单验证是一回事。在GetTimes
调用中,我们检查from
DateTime是否在to
DateTime之前 - 这是由所有GetTime
实现完成的。
另一个问题是如何处理未实现的方法。 GetTimes
和GetTimeTypes
方法几乎总是一起使用。但在一次整合中,没有时间类型。方法GetTimeTypes()
会抛出ImplementationMethodNotSupportedException()
,timeTypeId
中的GetTimes
参数会被忽略。
我确定还有其他问题,但现在才想到这两个问题,验证问题引起了最大的麻烦。
我想要一个新的图层。可以处理常见验证的地方,也可能是应用程序可以覆盖行为的地方 - 例如在ImplementationMethodNotSupportedException
示例中处理GetTimeTypes
作为返回时间类型的空列表。
但我不知道该怎么办。任何改进我们的方法或完整改造的建议都会很棒!
答案 0 :(得分:0)
关于GetTimes方法的验证。
你说你有GetTimesParameters类传递给GetTimes方法。那么就不可能创建无效的GetTimesParameters实例。只需在其构造函数中进行验证,GetTimes方法不需要验证传入参数。