向现有类添加新功能(C#)

时间:2011-10-10 09:44:30

标签: c# oop

在c#.net应用程序中,我有两个类,如下所示

  

员工

     

EmployeeId:int:主键

     

名称:字符串

     

作业

     

JobId:int:主键

     

名称:字符串

     

EmployeeId:int

在数据库(SQL Server)中,我有两个表来保存这些类中的数据(Employee& Job) (ID字段是自动增量字段,因此在两个表中都可以具有相同的no)

现在我需要实现一个新功能,让用户为Employees或Jobs添加注释,所以我需要创建一个Comment类来共享这两个类。

什么是最好的Class&用于实现此新功能的表结构。

9 个答案:

答案 0 :(得分:3)

您可以创建以下表格...

  

评论(CommentId,Text,[other fields ...])

     

JobComments(CommentId,JobId)

     

EmployeeComments(CommentId,EmployeeId)

..然后你可以使用每种类型的继承表(如果使用EF参见here),或者你可以使用标准关系来完成。

答案 1 :(得分:2)

我建议使用数据库设计,以便将来添加更多注释类型,而无需修改数据库。

表评论

Id (int, Primary Key)
CommenteeId (int, not null)
CommentTypeId (int, not null)
Text (nvarchar(255))

表格注释

Id (int, Primary Key)
Name (nvarchar(50), not null)

CommenteeId会引用JobEmployee或您将来需要发表评论的任何其他表格。

CommentTypeId会引用CommentType,您可以根据需要添加类型。


至于你的班级设计,它看起来像这样:

public class Job
{
    public List<Comment> Comments;
    public string Name { get; set; }
}


public class Employee
{
    public List<Comment> Comments;
    public string Name { get; set; }
}

......作为一个基本想法。 CommentEmployee中加载Job的方式和时间取决于您访问数据库的方法。

答案 2 :(得分:1)

如果职位评论与员工之间没有差异,我会建议下一步:

  1. 添加表“评论”。我不确定你的业务逻辑,但我认为它会有下一个filds: CommentdId,UserId,IsJobComment(这将是显示工作或员工的cmmments之间差异的位值),IsEmployeeComment(将显示这是否为Employee的评论),Text,RelatedItemID(这将包含相关工作或员工的ID)

  2. 班级结构: 将列表添加到类Job和Employee

  3. 使用值添加对象注释:ID,UserID,Text。

  4. 更新:还有一个想法。

    而不是添加IsEmployeeComment和IsJobComment,而不是将其更改为简单列CommentTypeID。

    然后添加Table CommentsType,它将包含下一个字段: 1.CommentTypeID 2.CommentType - 将定义类型的字符串值:Employee或Job。因此,添加新评论类型时:只需为此字段添加值。

答案 3 :(得分:1)

数据库方面我不希望每种类型的评论都需要单独的表。

例如,Employees和Jobs表可以有一个CommentID列,而Comments表可以是这样的:

CommentID int
RelatedCommentID int
CommentText ntext

然后,您将为第一个和所有后续注释设置RelatedCommentID = CommentID。

答案 4 :(得分:0)

为此,最好创建两个表:JobComments和EmployeComments。

两者的内容相同:

  

CommentId:int:主键&amp; AUTO_INCREMENT

     

ReferenceId:int:外键

     

内容:varchar

根据您的需要,您可能需要更多字段。

答案 5 :(得分:0)

我个人只会在每个表中添加一个注释列,并为每个类添加一个字符串变量。

在您的数据库中,如果您想在单独的表中包含注释,我认为您需要两个单独的表,对于正在存储的数据而言似乎毫无意义。您需要这两个表,因为如果您将Job和Employee的注释保留在一个表中,则每个表的ID都会发生冲突。

在软件中你对除了获得/设置值之外的其他评论做了什么?似乎使用额外的类来进行评论只会使事情过于复杂。

答案 6 :(得分:0)

如果您希望保留在一个表格中:

Comment:
JobCommented : int <- references a job
EmployeeCommented : int <- references an employee
Comment : string

JobCommented和EmployeeCommented都可以为空。无论哪个填充都连接到父母。

答案 7 :(得分:0)

我会创建一个评论表

commentId NUMBER;
commentText VARCHAR2;

和两个关系表:

EmployeeComments

commentId NUMBER;
employeeId NUMBER;

和JobsComments

commentId NUMBER;
jobId NUMBER;

然后选择带有内连接的注释。

这应该至少尊重前三种形式的db规范化。

PS:当然有一些外键只是为了确保不要忘记孤立的评论。

对于c#中的对象,嗯,只需用左边的连接来连接表格。

答案 8 :(得分:0)

我可能会创建一个类Comments,并且在每个现有类中都有List个类。如果有任何变化,那么您可以始终将其子类化为JobComments和EmployeeComments。

对于数据库,我可能实际上将两个表分开。这部分是因为我认为在担心身份方面这样做可能会更容易。如果它们彼此在同一个表中,那么您需要担心ParentTable和ParentId或类似的复合键。

此外,如果两种评论类型有所不同,那么将它们放在数据库中的单独表格中要容易得多。