当父Web在Web应用程序中不完整时,保留子对象

时间:2008-12-01 04:18:04

标签: oop

我正在尝试建立在父对象不完整或Web应用程序中尚不存在时处理子对象创建的最佳实践。我希望以无状态的方式处理这个问题,因此在内存对象中出来了。

例如,假设我们有一个错误跟踪应用程序。

Bug有标题和描述(都需要)和任意数量的附件。因此,“Bug”是具有“附件”子项列表的父对象。

因此,您将显示一个页面,其中包含标题输入,描述输入和用于添加附件的文件输入。然后人们添加附件,但我们还没有创建父Bug。

如何处理持久添加的附件?

显然我们必须跟踪添加的附件,但此时我们还没有持久保存父“Bug”对象来附加“附件”。

3 个答案:

答案 0 :(得分:1)

我通常只是在用户提交表单后,在同一个HTTP响应中创建Bug对象及其子对象Attachment对象。

如果我正确地阅读了您,则用户输入包含一个表单,其中包含错误标题,说明和附件的上述字段。在用户填写这些字段(包括选择要上传的文件)之后,然后单击“提交”,您的应用程序将同时接收所有这三个数据,作为HTTP请求中的POST变量。 (附件只是POST数据的另一部分,如RFC 1867中所述。)

从您的应用程序结束,根据您使用的框架类型,您可能会获得一个文件名,指向上传文件在某个合适的临时目录中的位置。例如,使用Perl的CGI模块,您可以:

use CGI qw(:standard);
my $query = CGI->new;
print "Bug title: " . $query->param("title") . "\n";
print "Description: " . $query->param("description"). "\n";
print "Path to uploaded attachment: " . $query->param("attachment") . "\n";

获取上传文件的名称(用户通过表单发送的文件数据会自动保存在临时文件中以方便您使用)及其元数据。由于您可以同时访问文本字段数据和文件附件,因此您可以按照自己喜欢的顺序创建Bug和附件对象,而无需在HTTP响应中保留任何不完整的数据。

或者我在这里不理解你?

答案 1 :(得分:1)

创建不完整的错误并定义处理不完整性的过程。 (等待X分钟/小时/天,然后删除它/给某人发电子邮件/接受它。)即使没有标题或描述,知道发生了问题并且附件中的信息可能有用。附件可能包含完整的描述,但用户只是将它放在您参加的其他地方。或者它可能只包含分散的数据点,这些数据点本身毫无意义 - 但可以证实另一个用户的报告。

答案 2 :(得分:0)

在这种情况下,我会考虑将附件存储在某种类型的临时存储中,无论是会话状态,文件系统上的临时目录,还是数据库。保存错误后,我会将附件复制到实际位置。

小心使用会话,如果你让他们上传大附件,你可能会根据你的环境推送内存问题。

我之前看到的一种方法是,一旦用户打开新的错误表单,就会在数据库中生成一个新错误。根据您的应用程序,这可能是也可能不是一件好事。例如,如果您从用户收集数据,即使他们无法输入数据并离开您的网站,这也很有用。你仍然知道他们开始了这个过程,以及你收集的其他任何东西,如用户代理等。