我有一个客户关系管理系统,其中有笔记,支付,DairyEvents和其他任何需要螺栓随着时间的推移。
我创建了一个具有日期时间和消息方法的ITimeline接口,并在这些模型上实现了它们。
这是我开始使用的最简单的代码形式:
public static List<Interfaces.ITimeline> GetAll(long personID)
{
List<Interfaces.ITimeline> timelineEvents = new List<Interfaces.ITimeline>();
timelineEvents.AddRange(Controllers.FollowUp.GetAll(personID));
//add more to the list as the system grows
return timelineEvents;
}这很好,只要其中一个控制器不抛出错误,整个接口就会崩溃。我在另一个项目--生产环境中也发生了类似的事情,一个供应商因为他们的系统上的一个错误而陷入混乱,而其他几个供应商正在与他们进行接口,并且工作得很好。如果它没有让所有的600+站点崩溃,那也不会太糟糕,仅仅是因为别人犯了一个错误。
我不想在每一个加载项周围尝试捕捉--我认为这只是杂乱无章。而且,通过这样的集成,您可以构建工作的东西,但是异常在这里和那里都会发生。
从各种源、控制器或集成获取数据,并将它们添加到接口项集合中的正确方法是什么?这样的话,如果有什么东西在中间失败了,它就不会毁掉整个页面,甚至更糟的是,整个框架。
发布于 2014-04-15 18:33:48
错误发生的地方,即控制器中的错误,应该被捕获。如果可能的话,尝试实现这样的东西
TimelineEventCollection personTimelineEvents; // Change to the appropriate collection type.
if (Controllers.FollowUp.TryGetAll(personID, out personTimelineEvents)) {
timelineEvents.AddRange(personTimelineEvents);
}这种方法的优点是错误不会被一些尝试捕获语句悄悄地吞没。您可以从TryGetAll获得一个布尔返回值,告诉您是否一切顺利。同时,基本错误处理发生在低级别方法中,而不是在列表填充例程中。
如果不能更改Controllers.FollowUp类,仍然可以编写一个扩展方法,提供相同的功能。
https://codereview.stackexchange.com/questions/47267
复制相似问题