【发布时间】:2017-07-14 03:18:53
【问题描述】:
我需要对可能是物理表或逻辑的数据源实施 CRUD 操作(内存缓存在查询多个表后保存数据)。数据源的理想选择是数据库中的表。但是由于某些原因,内存中缓存类的替代实现可以模仿理想的实现。
interface IEmp
{
Add();
Update();
Remove();
}
有两种实现方式:
- 类雇员
在sqlite中对物理表进行操作
- 类 EmpCache
操作内存缓存 - 聚合来自多个其他表的数据
基于性能或其他非功能性需求,类消费者可以选择切换到 2 个选项中的任何一个。
我正在考虑在这里应用设计模式,以免造成太多返工。
我在这里看到了 2 种适用的设计模式:
一个。策略模式 -
IEmp 接口将有 2 个单独的实现(如上)。 例如
Class EmpTable
{
IEmp table;
bool isInMemory;
}
基于 isInMemory T/F table 将底层实例切换到上述实现的 1 {Emp or EmpCache}
b.装饰器模式 - 另一个接口扩展+封装IEmp接口。并基于属性变化 - 它将酌情采取行动/委托 例如
IEmpCache : IEmp
{
IEmp instance;
bool useCache;
}
EmpCache : IEmpCache
{
Add()
{
if(!useCache)
{
instance.Add();
}
//cache logic
}
... // same for all other methods
}
我认为 b 方法更好,但主要用于需要添加/增强已发布的功能(类/接口)时,不是吗?
哪个更好?还有其他更好的模式吗?
【问题讨论】:
-
你和哪一个一起去的?
标签: caching design-patterns decorator strategy-pattern