【发布时间】:2011-02-17 19:31:41
【问题描述】:
我正在考虑两种不同的类设计来处理一些存储库是只读的而其他存储库是读写的情况。 (我预计不需要只写存储库。)
类设计 1 -- 在基类中提供所有功能,然后在子类中公开适用的功能
public abstract class RepositoryBase
{
protected virtual void SelectBase() { // implementation... }
protected virtual void InsertBase() { // implementation... }
protected virtual void UpdateBase() { // implementation... }
protected virtual void DeleteBase() { // implementation... }
}
public class ReadOnlyRepository : RepositoryBase
{
public void Select() { SelectBase(); }
}
public class ReadWriteRepository : RepositoryBase
{
public void Select() { SelectBase(); }
public void Insert() { InsertBase(); }
public void Update() { UpdateBase(); }
public void Delete() { DeleteBase(); }
}
类设计2 - 读写类继承自只读类
public class ReadOnlyRepository
{
public void Select() { // implementation... }
}
public class ReadWriteRepository : ReadOnlyRepository
{
public void Insert() { // implementation... }
public void Update() { // implementation... }
public void Delete() { // implementation... }
}
这些设计中的一个明显比另一个强吗?如果有,是哪一个?为什么?
附:如果这听起来像是一个家庭作业问题,那不是,但如果你愿意,可以随意使用它:)
【问题讨论】:
-
为什么要区分两种repository?
-
@John,好吧,也许不是,但我想我想确保我保护不应该因意外编辑而更改的数据库表。
-
@DanM:您的 DBA 对此有何看法?大多数人会觉得保护数据库的地方是在数据库中,而不是在你的代码中。
-
@John:我是 DBA :) 在这种情况下,数据库只不过是一个带有一些外键的数据存储。数据库中没有任何内容可以防止对本应为只读的表进行插入/更新/删除。
-
@John:通过代码保护数据库免受意外愚蠢的影响并非完全不合理(即,使代码更清晰,以提高可维护性)。当然,为了防止可能导致您的程序以意外方式运行的恶意用户,我想说这不是一个理想的方法。
标签: c# design-patterns architecture class-design