Tag: devise原则

复合主键中可为空的列有什么问题?

ORACLE不允许任何组成主键的列中的NULL值。 似乎大多数其他“企业级”系统也是如此。 同时,大多数系统还允许在可空列上有唯一的限制。 为什么独特的约束可以有NULL,但主键不能? 这是否有一个基本的逻辑原因,或者这是更多的技术限制?

为什么Java不允许Throwable的通用子类?

根据Java语言select第3版: 如果generics类是Throwable的直接或间接子类,那么这是一个编译时错误。 我想了解为什么做出这个决定。 genericsexception有什么问题? (据我所知,generics只是编译时语法糖,在.class文件中它们会被翻译成Object ,所以有效地声明一个generics类就好像它的一切都是一个Object 。我错了。)

为什么variables名称不能以数字开头?

我刚刚和一个新的c ++开发人员一起问了一个问题:“为什么variables名称不能以数字开头? 我不能拿出答案,除了一些数字可以有文字(123456L,123456U),如果编译器认为所有的字母字符都是variables名称,那么这是不可能的。 这是正确的答案吗? 还有更多的理由吗? string 2BeOrNot2Be = "that is the question"; // Why won't this compile?

避免嵌套try catch块的模式?

考虑一种情况,我有三种(或更多)的计算方法,每种方法都可能会失败并产生一个exception。 为了尝试每一个计算,直到find一个成功的,我一直在做以下工作: double val; try { val = calc1(); } catch (Calc1Exception e1) { try { val = calc2(); } catch (Calc2Exception e2) { try { val = calc3(); } catch (Calc3Exception e3) { throw new NoCalcsWorkedException(); } } } 有没有一种更好的方式来达到这个目的? 当然,我可以将每个计算包装在一个帮助器方法中,在失败时返回null,然后使用?? 运算符,但有没有办法更一般地这样做(即不必为每个我想使用的方法编写一个帮助器方法)? 我想写一个静态方法使用generics封装在try / catch中的任何给定的方法,并在失败时返回null,但我不知道如何去做这件事。 有任何想法吗?

SQL ON DELETE CASCADE,删除发生在哪一种方式?

如果我在数据库中有两个关系,就像这样: CREATE TABLE Courses ( CourseID int NOT NULL PRIMARY KEY, Course VARCHAR(63) NOT NULL UNIQUE, Code CHAR(4) NOT NULL UNIQUE ); CREATE TABLE BookCourses ( EntryID int NOT NULL PRIMARY KEY, BookID int NOT NULL, Course CHAR(4) NOT NULL, CourseNum CHAR(3) NOT NULL, CourseSec CHAR(1) NOT NULL ); 我build立了两者之间的外键关系,如下所示: ALTER TABLE BookCourses ADD FOREIGN […]

“忘记密码”实施的最佳途径?

我正在寻找实施“忘记密码”function的最佳方法。 我有两个想法: 当用户点击忘记密码时,用户需要input用户名,电子邮件,可能是出生date或姓氏。 然后一个带有临时密码的邮件将被发送到用户的电子邮件帐户。 用户使用临时密码login并重置他的密码。 类似的,但电子邮件将包含一个链接,让用户重置他的密码。 或者任何人都可以build议我一个更好和更安全的方式 我也想发送临时密码或链接,强制用户在24小时内重置密码,否则临时密码或链接将不可用。 怎么做?

你什么时候使用桥梁模式? 与适配器模式有什么不同?

有没有人在现实世界的应用程序中使用桥梁模式 ? 如果是这样,你是怎么使用它的? 是我吗,还是仅仅是一个适配器模式与一点点依赖性注入混合注入? 它真的值得拥有自己的模式吗?

如何存储历史数据

有些同事和我就存储历史数据的最佳方式进行了辩论。 目前,对于某些系统,我使用一个单独的表来存储历史数据,并保留当前活动logging的原始表。 所以,假设我有桌子FOO。 在我的系统下,所有的活动logging都会以FOO的forms出现,所有的历史logging都会以FOO_Hist的forms出现。 FOO中的许多不同的领域可以由用户更新,所以我想保留一切更新的准确的帐户。 除了自动递增HIST_ID之外,FOO_Hist与FOO保持完全相同的字段。 每次更新FOO时,我都会在FOO_Hist中执行一条插入语句,类似于: insert into FOO_HIST select * from FOO where id = @id 。 我的同事说这是不好的devise,因为由于历史原因,我不应该有一个表的确切副本,应该插入另一个logging到活动表中,并带有一个标志,表明这是历史的目的。 是否有处理历史数据存储的标准? 在我看来,我不想把我所有的历史logging都logging在同一张桌子上,考虑到它可能超过一百万条logging(我想的是长期的)。 你或你的公司如何处理? 我正在使用MS SQL Server 2008,但我想保持答案通用和任意的任何DBMS。

使用策略模式和命令模式

这两种devise模式都封装了一个algorithm,并将实现细节从其调用类中分离出来。 唯一的区别是我可以看出,战略模式需要参数执行,而命令模式不。 在我看来,命令模式要求创build时所有的执行信息都是可用的,并且能够延迟其调用(可能作为脚本的一部分)。 什么决定指导是否使用一种模式或另一种模式?

模板方法和策略模式有什么区别?

有人请向我解释模板方法模式和策略模式之间有什么区别? 据我可以告诉他们是99%相同 – 唯一的区别是模板方法模式具有抽象类作为基类,而战略类使用由每个具体战略类实现的接口。 然而,就客户而言,他们的消费方式完全一样 – 这是正确的吗?