13

在我的数据库中,我有定义类型的表,例如

表:出版物类型

身份证 | 类型
----------
1 | 文章
2 | 抽象的
3 | 书
……

它通过 ID 键与具有字段TypeID的发布表相关联。

然后,我在我的 .NET 应用程序中创建了一个 PublicationTable 数据表,我想根据发布类型对其进行过滤。例如,以下函数为我提供了特定作者和出版物类型的出版物数量。

    公共函数 countPublications(ByVal authorID As Integer, _
                                      ByVal PublicationType As Integer) As Integer

        将 authPubs 调暗为新 PublicationsDataSet.tblPublicationsDataTable
        authPubs = Me.getAuthorsPublications(authorID)

        将 dv 调暗为新数据视图(authPubs)
        dv.RowFilter = "status='已发布' AND type='" + _
                       发布类型.ToString + "'"

        返回 dv.Count

    结束功能

要调用此函数以获取特定类型作者的文章计数,我可以

  1. 用两个整数调用函数

    countPublications(作者ID, 1)

  2. 设置一个枚举,以便我可以编写

    countPublications(authorID, pubType.Article)

    或者

  3. 以某种方式使用发布类型表来过滤发布数据集,但我不知道如何做到这一点。

我应该考虑哪些其他方法。

谢谢

4

4 回答 4

5

如果发布类型本质上是静态的,那么枚举就可以了

可以说嵌入之间几乎没有区别

inner join lookuptable lt on lt.id = (int)myenum.sometype 

在查询中并添加

inner join lookuptable lt on lt.name = "somehardcodeddescription"

它们都是嵌入式常量,前者只是在它后面有一个定义明确的类型

或者你可以使用

inner join lookuptable lt on lt.name = myenum.sometype.ToString

我更喜欢前者

另一方面,如果在部署代码后可能会添加新的查找类型,那么枚举很快就会过时;

但是如果有代码需要的一组核心静态枚举值,其余的都无关紧要,那么前一个解决方案仍然可以

像往常一样,“这取决于”;-)

于 2008-10-31T00:09:54.017 回答
5

在前世保持这种事情,我同意史蒂文的观点,这enum是相当合理的。您的代码很清晰,enum如果您添加数据类型,则意味着您只需要更新一个文件。

我还建议对 进行评论enum,明确说明这些值需要与Publication Types数据库表中的值相匹配。

好问题,顺便说一句!+1 如此清楚地解释了这个问题,并在发布之前花时间集思广益。

于 2008-10-31T00:51:17.880 回答
2

我认为这取决于您的出版物类型列表将来更改的频率,以及您推出应用程序更新的难易程度。如果列表不会经常更改,或者如果在现场更新您的应用程序很容易,那么枚举是有意义的。如果列表可能经常更改,或者如果更新您的应用程序特别困难,那么将列表保存在数据库中的表中是明智的。

于 2008-10-31T01:36:04.340 回答
0

出于各种原因,最好将我的出版物类型列表等列表和其他列表保存在一个地方;数据库。那么只有一个地方可以让他们改变。但是,在我看来,这增加了代码的复杂性,如果我想引用特定的出版物类型(例如期刊文章),我仍然需要在代码中包含一些硬编码元素。因此,具有反映表中数据的枚举类型使我有可能以可读的方式调用我的计数函数

countPublications(authorID, publicationType.JournalArticle)

如果表中的数据不太可能发生变化,我可以在数据库中添加注释以提醒维护者(可能是我)更新代码中的枚举类型,反之亦然。

谢谢大家的答案。我现在可以安心地继续我的想法了。

于 2008-10-31T16:23:24.297 回答