【发布时间】:2009-06-01 19:18:32
【问题描述】:
希望您能在下面的场景中看到我所描述的问题。如果不清楚,请告诉我。
你有一个分为三层的应用程序,
- 前端UI层,可以是asp.net webform,也可以是window(用于编辑Person数据)
- 中间层业务服务层,编译成dll(PersonServices)
- 数据访问层,编译成dll(PersonRepository)
在我的前端,我想创建一个新的Person对象,根据用户在UI中输入的内容设置一些属性,例如FirstName,LastName,然后调用PersonServices.AddPerson,传递新创建的Person . (AddPerson 不必是静态的,这只是为了简单起见,在任何情况下,AddPerson 最终都会调用 Repository 的 AddPerson,然后它将数据持久化。)
现在我想听听您的意见的部分是验证。在某个地方,需要验证新创建的 Person 。您可以在客户端执行此操作,这很简单,但如果我想在我的 PersonServices.AddPerson 方法中验证 Person 怎么办。这将确保我要保存的任何人都将得到验证,并消除对 UI 层执行工作的任何依赖。或者,在 UI 和业务服务器层中进行验证。到目前为止听起来不错吧?
因此,为简单起见,我将更新 PersonService.AddPerson 方法以执行以下验证检查 - 检查 FirstName 和 LastName 是否不为空 - 确保我的存储库中不存在这个新人
如果所有验证通过并且 Person 被持久化,此方法将返回 True,如果验证失败或 Person 未被持久化,则返回 False。
但是 AddPerson 返回的这个布尔值不足以让我在 UI 层向用户明确说明保存过程失败的原因。那么孤独的开发者该怎么办呢?最终,我希望 AddPerson 方法能够确保它要保存的内容是有效的,如果不是,能够将它无效的原因传达给我的 UI 层。
只是为了让你的汁液流动起来,解决这个问题的一些方法可能是:(在我看来,其中一些解决方案很糟糕,但我只是把它们放在那里,这样你就可以了解我想要做什么解决)
AddPerson 不是返回布尔值,而是返回一个 int(即 0 = 成功,非零等于失败,数字表示失败的原因。
在 AddPerson 中,当验证失败时抛出自定义异常。每种类型的自定义异常都会有自己的错误消息。此外,每个自定义异常都足够独特,可以在 UI 层中捕获
让 AddPerson 返回某种自定义类,该类具有指示验证是通过还是失败的属性,如果确实失败了,原因是什么
不确定这是否可以在 VB 或 C# 中完成,但将某种属性附加到 Person 及其基础属性。这个“附加”属性可能包含验证信息等内容
在此处插入您的想法或模式
这里可能还有一个
对于这个冗长的问题,我深表歉意,但我绝对想听听您对此的看法。
谢谢!
【问题讨论】: