是否应在DAO中强制执行特定于数据源的限制?

时间:2013-03-23 20:26:49

标签: java mysql constraints dao

是否有任何关于实施数据源特定限制的建议做法?

例如,当保存String超过255 or 65535 limit given in MySQL documentation时,有一个断言或抛出异常。或者这应该由数据源处理吗?

http://dev.mysql.com/doc/refman/5.0/en/char.html

  

VARCHAR列中的值是可变长度字符串。长度可以   在MySQL 5.0.3之前指定为0到255之间的值,0到   5.0.3及更高版本中的65,535。 a的有效最大长度   MySQL 5.0.3及更高版本中的VARCHAR受最大行大小的限制   (65,535字节,在所有列之间共享)和字符   设置使用。请参见第E.7.4节“表列计数和行的限制”   尺寸”。

1 个答案:

答案 0 :(得分:1)

在您的数据访问层中,您应该执行的唯一验证是为特定数据库架构定义的验证。您可以将数据访问层视为模式的对象表示,尽可能合理地模仿模式的结构,数据类型和约束, 但不能再 即可。因此,考虑到以下简单的架构:

CREATE TABLE `users` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `user_name` VARCHAR(64) NOT NULL,
    `passwordHash` VARCHAR(256) NOT NULL,
) ENGINE=InnoDB, DEFAULT CHARACTER SET utf8;

您将在数据访问层中验证:

  • userName属性在保存之前设置,它是一个长度小于或等于64个字符的字符序列
  • passwordHash属性在保存之前设置,并且是长度小于或等于256个字符的字符序列

但是,非常重要的是,您应该严格避免任何与绑定到特定数据库实现的检查。首先,您希望数据访问层与提供程序无关,其次,大多数特定于供应商的限制会在您尝试创建表时立即触发。