集成库结构

时间:2014-12-14 19:48:39

标签: c# design-patterns structure

我的公司有一个与通用“前端”集成的库。我们的产品之一是简单的网络预订工作,通过我们的集成库,我们可以在多个外部系统中添加约会 - 从Microsoft Exchange和Google Calendar到EMR系统中的预约寄存器。我们在这个库中共有28个集成。

这是一个简化的示例,说明如何处理与SystemA和SystemB集成的某些时间请求。

enter image description here

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实现完成的。

另一个问题是如何处理未实现的方法。 GetTimesGetTimeTypes方法几乎总是一起使用。但在一次整合中,没有时间类型。方法GetTimeTypes()会抛出ImplementationMethodNotSupportedException()timeTypeId中的GetTimes参数会被忽略。

我确定还有其他问题,但现在才想到这两个问题,验证问题引起了最大的麻烦。

我想要一个新的图层。可以处理常见验证的地方,也可能是应用程序可以覆盖行为的地方 - 例如在ImplementationMethodNotSupportedException示例中处理GetTimeTypes作为返回时间类型的空列表。

但我不知道该怎么办。任何改进我们的方法或完整改造的建议都会很棒!

1 个答案:

答案 0 :(得分:0)

关于GetTimes方法的验证。

你说你有GetTimesParameters类传递给GetTimes方法。那么就不可能创建无效的GetTimesParameters实例。只需在其构造函数中进行验证,GetTimes方法不需要验证传入参数。