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