对于三层应用程序而言,面向对象编程时我有点困惑.这只是我想要做的一个小例子(我将缩短数据库设计以使其变得简单).假设我正在制作票务服务台系统.机票有说明,负责人,截止日期,当然还有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,直到它被持久化.
在你的问题的第二部分:
如果要更新故障单,则肯定不会创建新的故障单对象.您更新现有对象.
也许你应该根据特定的图书馆或技术澄清或重新提出这个问题.