创建日期 - 应该在 BL 或 DAL 中设置此值?

Posted

技术标签:

【中文标题】创建日期 - 应该在 BL 或 DAL 中设置此值?【英文标题】:Date Created - should this value be set in the BL or DAL? 【发布时间】:2011-04-06 01:15:24 【问题描述】:

日期 创建了一个我感兴趣的特定示例 - 但还有其他一些属于同一类别的数据:您想要捕获的关于任何模糊重要实体的数据。

最好在哪里执行此操作:业务逻辑 (BL) 或数据访问层 (DAL)?

到目前为止,我一直依赖 SQL Server 的 getdate() 来填充为我创建的插入到表中的日期,但现在我开始怀疑我是否应该在 BL 中做更多的事情。

仅供参考 - 这主要是在基于 Web 的系统中,您在 BL 中创建一个对象(基于用户输入)并在 DAL 中触发它 - 这并不像我一直想要引用的对象多年的内存(因此在对象上具有“创建日期”属性以在创建对象时在 BL 中使用不是问题)。

也许还有第三种选择 - 在阅读 Marr75 的回答后,我想到记录两次可能在某些场景中有用(在两个位置一次)。您将受益于数据层中一致的日期/时间,但您仍然可以参考 BL 驱动值 - 我想我将取决于您的用例。不过,此选项并非没有风险 - 人们可能会开始为错误的事情使用错误的日期。

【问题讨论】:

【参考方案1】:

我会说:是的。

也许养成在 BL 中设置创建日期和最后访问日期的习惯。然后在您的 DAL 中,始终检查这些字段中的空值。如果它们为空,请考虑您的选择:抛出异常,或仅在该层填充这些值。插入/更新之前的全部内容。

我的模式与您在问题中描述的相同。然后我面临着让应用程序使用/使用 UTC 时间戳的问题,我想我只是将这种行为移到 BL 和/或 DL 类中。是的,我本可以使用GETUTCDATE(),但感觉在 BL/DL 中包含此逻辑更合适。

【讨论】:

我同意你的想法——但将这个责任放入 BL 的原因之一肯定是因为你有你想要执行的规则——比如没有空值。是否存在 BL 不关心但数据库关心的情况?【参考方案2】:

我始终投票支持 DAL。过去,依赖数据库以外层的日期和时间一直是我的错误来源。在大多数设置中,您很有可能保证数据库的日期和时间一致。客户端-服务器甚至服务器-服务器的时间同步问题导致了令人讨厌的、难以复制、难以修复的问题。

【讨论】:

以上是关于创建日期 - 应该在 BL 或 DAL 中设置此值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iPhone 中设置此布局需要一些帮助

如何将X-Frame-Options标头设置为Jboss-as-7.1.1.Final?要求是在服务器的欢迎页面中设置此标头

如何更改 Android ListView 分隔线的颜色?

iPhone核心数据关系

在 ASP.NET 应用程序中自动生成 DAL

存储库模式:DAL 或 BLL [关闭]