【发布时间】:2010-12-29 21:15:36
【问题描述】:
所以,我希望得到一些关于在以下情况下设计类和存储数据的最佳方式的反馈:
我有一个名为 Tasks 的界面,如下所示:
interface ITask
{
int ID{ get; set;}
string Title {get; set;}
string Description{get; set;}
}
我希望能够根据谁在使用应用程序来创建不同类型的任务...例如:
public class SoftwareTask: ITask
{
//ITask Implementation
string BuildVersion {get; set;}
bool IsBug {get; set;}
}
public class SalesTask: ITask
{
//ITask Implementation
int AccountID {get; set;}
int SalesPersonID {get; set;}
}
因此,按照我的看法,我可以在数据库中创建一个 Tasks 表,其中包含与 ITask 接口匹配的列以及将更具体任务的所有属性推送到单个列中的列(或者甚至可以序列化任务对象成单列)
或
为每个任务类型创建一个表来存储该类型独有的属性。
我现在真的不喜欢这两种解决方案。我需要能够创建不同类型的任务(或任何其他类),它们都通过基本接口共享一组共同的核心属性和方法,但能够以易于搜索的方式存储其独特的属性并进行过滤,而不必为每种类型创建一堆数据库表。
我已经开始研究插件架构和策略模式,但我看不出两者都可以解决我在存储和访问数据方面的问题。
非常感谢任何帮助或朝着正确的方向推动!!!
【问题讨论】:
-
您应该创建一个二进制字段而不是“isBug”,并且 2 = 错误,4 = 增强 8 = 另一种。这样它可能会变得更加灵活。只是一个建议。这就是所谓的旗帜。更多这里dreamincode.net/forums/topic/15494-c%23-flags
-
上面列出的属性无关紧要,只是为了说明子类型将有一些独特的属性添加到 ITask。我不会在 SoftwareTask 类上创建 IsBug 属性....我只是想举个例子....但是感谢您查看 Flavio!
标签: c# asp.net design-patterns architecture mvp