4 architecture data-access-layer
我正面临着关于如何设计DAL的设计问题.众所周知,在最基本的定义中,DAL意味着负责与某些数据存储库通信的层(当然我不是在讨论存储库模式),通常是数据库.现在这就是捕获的地方.我们的一些业务对象必须从数据库中获取数据,而有些则从其他来源(即Web服务)获取数据.我们团队中的一些成员建议BO应该足够聪明,知道是否要调用DAL(只知道与数据库通信)或调用所需的Web服务.其他人认为这可能不是一个最佳解决方案,这表明一切都应该通过DAL,在那里它将包含让我们说的适配器,或者其他任何数据检索方法.
您如何构建具有此类数据访问需求的系统?从长远来看,任何建议的解决方案是否足够好(第二个可能需要更多时间来开发),还是我们需要采取完全不同的方法?也许有一种适合这种问题的设计模式......
谢谢,Avi Shilon
我强烈推荐第二种方法.业务逻辑不应该知道有关数据源的任何信息.
如果它不知道,除了通常的好处(由于隔离和更清洁的设计更容易维护),您还可以灵活地(取决于您的DAL设计的好坏程度):
如您的最低要求所述,从各种数据源检索数据
从优先级数据源集中检索数据以实现故障转移.
例如,您从路透社实时报价服务获得最新报价,但是当由于WAN问题导致报告失败时,您将退回到备用服务或数据库中缓存的较旧价格.
显然,数据源的优先级是非增加质量和非减少可靠性.
从优先级数据源集中检索数据以实现缓存
例如,从本地缓存中检索价格(如果缺少),从本地数据库检索,如果缺少,则从供应商的服务请求.
此外,如果您的数据源从实时查询的供应商服务更改为由供应商提供的推送源填充的内部黄金副本数据库,您只需要更改DAO而不是需要数据的众多BO中的每一个.更易于更改,并且更安全地测试和部署更改.