Skip to main content
 首页 » 编程设计

c#之在使用 3 层设计模式的 Web 应用程序中,底层之一是否应该提供一些检查机制以确保……

2024年01月16日29xxx_UU

我正在尝试使用 4 层设计模式(数据存储、DAL、BLL 和 UI)编写网络应用程序。 除其他事项外,该应用程序还将实现一个论坛。

假设我想将一个话题从一个论坛转移到另一个论坛。为了做到这一点,UI 层必须将线程的 ID 和我希望将该线程移动到的论坛的 ID 传递给其他层(UI 将通过调用 BLL 层中的方法 A 来传递这些参数,而 A 将在在 DAL 层转调用方法 B…)。

a) 现在底层之一是否应该提供某种检查机制以确保 UI 层提供的两个 ID 参数确实代表现有线程和现有论坛,或者 UI 层是否有责任提供有效 ID值(value)观?

谢谢


编辑:

I would consider the ability to pass invalid IDs a bug.

仅在移动线程或显示线程的情况下,是否应将不存在的 ID 视为错误。因此,当用户导航到页面 Showthread.aspx?ID={0} 时,如果查询字符串参数 ID 引用了不存在的 ID,如果没有层检查 ID 的有效性,那么 GridView 根本不会显示任何

“But in this case it doesn't look like the ids are in any sort of list. If they were one could only assume that this would never happen as I assume the lists would be populated by a stored procedure or a DAL procedure that pulls all valid IDs.”

但即使用户从一组列表中选择 ID,当它返回页面时,包含此 ID 的数据库表可能同时被管理员或任何人更改?!

请您参考如下方法:

您应该在应用程序的所有层进行验证。我建议 BLL 提供一些功能,例如

bool ConversationThread.Exists(threadID)

bool Forum.Exists(forumThreadID)

然后 UI 层可以防御性地调用这些函数以确保输入有效。 BLL 中的这些函数可能会委托(delegate)给 DAL 中的类似函数。

此外,在DAL中你也应该做同样的验证,如果验证失败则抛出异常,因为在现实中,你应该在应用程序的所有层进行验证