.net – 如何在面向对象的代码中设置ID

对于三层应用程序而言,面向对象编程时我有点困惑.这只是我想要做的一个小例子(我将缩短数据库设计以使其变得简单).假设我正在制作票务服务台系统.机票有说明,负责人,截止日期,当然还有ID(唯一).

假设ID只是一个类型为integer的IDENTITY列,并自动获取其值(SQL Server).也就是说,只有在插入完成后才能获得它的值.

现在只是一些示例伪代码(它可能不对,所以不要让语法错误,只是试图得到关于如何存储ID的答案).

我可以轻松创建一个Ticket类

public class Ticket
 {
   private string m_description;
   private date m_duedate;
   private string m_responsible;
   private int m_id; //should this be read only ??? or...how

  //then I can have a bunch of Properties to get / set these private variables
   public Property Responsible{
       get 
           { return m_responsible; }
       set 
           { m_responsible = value; }
   }

  //and so on..again dont worry about syntax.  Now should I have a get / set for the ID?
 }

好的,我有这个名为ticket的类..但是当我创建一个票对象并需要从我的BLL(业务逻辑层)插入它时会发生什么

Bll b = new Bll();
  Ticket t = new Ticket();
  t.Responsible = someString;
  t.DueDate = someDate;
  t.Description = someLongString;
  //use the BLL to create a ticket object and pass it to the DAL ?
  //then assign the ID from the database to t.ID ???
  t.ID = bll.InsertTicket(t);

//将它传递给BLL,它执行它的操作,并将它传递给DAL执行INSERT语句,然后返回数据库给它的ID号.

所以我的问题是我需要如何或何时分配t.ID,或者我甚至需要在插入后给予我完成.我总是对OOP感到困惑,因为我倾向于认为它使事情更复杂,然后传递一大堆参数.

好的,所以有人可以帮我理解我是否需要获取/设置ID以及是否应该将该值传递回我的界面.我的第二个问题是更新?
假设最终用户找到了一张票,所以在我的界面上我检索了一些票据数据,有人想要更新说明说明和截止日期.当我“提交”这些更改时,我应该只创建一个故障单对象,设置所有get / set属性值,那就是它吗?或者我应该只将ID号码和所有参数传递给我的BLL并让它全部处理?

希望这一切都有意义!

非常感谢你们!

最佳答案 答案是它取决于您使用的框架或库.

并非所有BLL都让你简单地说Ticket t = new Ticket(),你可能不得不使用t = b.CreateTicket()或其他东西. Id可以是临时值,也可以只是null / 0,直到它被持久化.

在你的问题的第二部分:

如果要更新故障单,则肯定不会创建新的故障单对象.您更新现有对象.

也许你应该根据特定的图书馆或技术澄清或重新提出这个问题.

点赞