Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Architecture 在.NET中,字符串解析的合适层是什么?_Architecture - Fatal编程技术网

Architecture 在.NET中,字符串解析的合适层是什么?

Architecture 在.NET中,字符串解析的合适层是什么?,architecture,Architecture,考虑一个标准的ASP.NET web应用程序,其中用户在表单上键入一些数字数据。提交时,一些业务对象被旋转起来,以对数字数据进行操作。但是.Net中的服务器端textbox控件返回字符串类型的值。问题:页面的codebehind是否应该负责将字符串解析为数字数据(如果无效,则抛出错误),或者业务对象是否应该接受字符串作为其输入并自行解析?IMO,业务对象应该只接受数字类型。根据特定于区域性的规则,可以以各种格式解析字符串。数字就是数字。您不想为了本地化而更改业务对象-只接受数字将使其更易于重用。

考虑一个标准的ASP.NET web应用程序,其中用户在表单上键入一些数字数据。提交时,一些业务对象被旋转起来,以对数字数据进行操作。但是.Net中的服务器端textbox控件返回字符串类型的值。问题:页面的codebehind是否应该负责将字符串解析为数字数据(如果无效,则抛出错误),或者业务对象是否应该接受字符串作为其输入并自行解析?

IMO,业务对象应该只接受数字类型。根据特定于区域性的规则,可以以各种格式解析字符串。数字就是数字。您不想为了本地化而更改业务对象-只接受数字将使其更易于重用。

业务对象只应被正确解析和验证


现在,这个解析和验证应该在codebehind中完成吗?很难说,因为代码隐藏实际上不是一个层。正确地说,codebehind应该只处理UI问题,并且应该在UI和业务之间的控制器层进行解析。然而,大多数人只是将控制器插入代码隐藏中。

通常,您希望业务逻辑接受它所使用的类型,这样做更清楚。格式化传入数据并在进入业务逻辑之前对其进行验证是一种很好的做法,因为您实际上并不是在处理数据,而是为业务层处理数据预先格式化。这尤其有助于在输入未通过验证时,您无需太多步骤即可将其返回给用户。

我不同意“让用户输入正确的数据”。用户应该能够输入对他们有意义的任何数据,如果可能的话,应用程序应该能够理解:因此,“2125551212”、“212 555 1212”、“212)555-1212”、“212.555.1212”都应该被接受为可行的电话号码。我有时认为“让用户输入正确的数据”可以用不同的方式解释。例如,我见过的最好的输入电话号码的小部件是文本框,它可以在您键入时自动插入括号和连字符——也许这更像是“帮助用户输入正确的数据”。@mmacaulay:视情况而定。那个小部件能让我在里面粘贴一个格式化的电话号码吗?(MSAccess有一个像你描述的格式化窗口小部件,而我总是恼火地说我不能粘贴它。)杰姆斯——如果我不能粘贴它,我会认为它是一个bug。我最熟悉的是一个用于控制VOIP电话的web应用程序。我刚检查过,它确实让我可以粘贴电话号码。