根据我的经验,编写 DAL 时有几个关键方面。
- 使 DAL 成为接口
- 选择正确的抽象级别
- 记住缓存
(1) 确保你的 DAL 是一个接口。这允许您模拟可能调用数据库进行测试的方法。如果您getItems()
在接口中有一个函数,那么您可以实现一个输出到您的数据库的类和一个模拟数据以进行快速单元测试的类。
(2) 在执行 (1) 时,请确保您选择了正确的抽象级别。例如,我在当前的公司看到了一个糟糕的 DAL,它对每个调用都使用了抽象查询语言。
例如,我们 DAL 中的一个调用是:
getItems(List filters, int limit, int skip)
.
相反,我希望看到:
getItems(List ids, int pageSize, int page)
.
我们让底层数据源(在本例中为 Mongo)的细节通过接口流出。我们在界面中公开了 Mongo 的特定功能。小心不要那样做!
如果你做得好这一步,你可以将你的支持数据存储从关系到文档交换到任何东西。
(3) 牢记缓存。非常简单,但请确保您考虑如何缓存您的 DAL 调用。这将有助于解决可扩展性问题。您可能会研究将与 DAL 调用一起使用的 AOP(面向方面的编程)。
您的具体问题:
- 我会允许高层传递独特的查询。请记住选择正确的抽象,以便您可以在需要时交换持久性存储。
- 使用大量缓存(可能是分布式缓存)来提供可伸缩性。就那么简单。=)