如何设计具有类似操作的解决方案,例如CRUD,但不适用于其所有子类

时间:2011-10-11 06:50:21

标签: c# oop design-patterns sharepoint-2010

我试图设计一个提供CRUD操作的解决方案。 我想为几个实体提供接口。每个类映射到单个实体的位置。每个类为每个实体提供CRUD操作。但是有些实体只提供某些操作。如仅读取和更新,创建和只读等。 我应该如何设计,以便我能够更好地扩展并为其他开发人员创建一个良好的界面?

我目前的设计:

5 Interface
IEntity, IReadItem, IDelete, ICreate, IUpdate.
Example IEntity -> Customer class
IReadList -> Read List Operations on Customer
IDelete-> Delete operation on Customer
ICreate -> Create Item operation on Customer
IUpdate -> Update Operation on customer

EntityFactory -> Instantiate the IEntity, and 4 operation concrete class.
 -> getEntity(EntityType(enum)) : return Concrete IEntity Class
 -> getReadList(ReadListType(enum),entity) : return concrete GetItemOperation Class
 -> getDelete(DeleteType(enum),entity) : return concrete DeleteItemOperation Class
 -> getCreate(CreateType(enum),entity) : return concrete CreateItemOperation Class

Entity -> Responislbe of caching own information and connection
Read,Create,Delete,Update -> Responsible of it own details and operation

Each entity have all or subset of the type 4 operation, CRUD.

有没有更好的方法来设计它?或对上述布局有何评论?

2 个答案:

答案 0 :(得分:0)

我的建议是选择一个众所周知的现有设计模式来处理关系数据库。看看你的代码很难确定你要去哪一个。一旦你适应了合适的模式,你可能会发现找到解决方案更容易。

您可以阅读一些持久性选项here。 Martin Fowler还展示了数据源架构模式下列出的几个on this page

当然,您也可以选择使用现有的ORM,例如Entity Framework或nHibernate。

答案 1 :(得分:0)

在询问了上面的实际设计目标之后......如果没有更具体的目标,我会说保持简单:

IEntity应具有Update和Delete方法,并且工厂应具有Read / List和Create方法。不支持该操作的实体/工厂应抛出异常或返回有意义的值。就是这样。