Tag: 反模式

关于“贫血领域模型”被认为是反模式的具体例子

如果这是重复,我道歉,但我在相关问题中找不到关于该主题的任何具体示例。 在阅读了Martin Fowler关于“贫血领域模型”的文章之后,我不知道为什么这被认为是一种反模式。 大多数企业开发人员甚至认为它是一种反模式,因为AFAIK可能有90%的j2ee应用程序是以“贫血”方式设计的? 有人可以推荐进一步阅读这个主题(除了“领域驱动设计”一书),甚至更好,给出一个具体的例子,说明这种反模式如何以一种糟糕的方式影响应用程序设计。 谢谢,

请问java RMI的意义吗?

为什么人们使用RMI,或者什么时候应该使用RMI? 我在oracle的网站上阅读了关于RMI的那些教程。但它没有提供足够的实际例子。 据我了解,软件的模块应尽可能“无关且分离”。 RMI似乎是一个与我高度耦合的例子。 为什么这不是一个糟糕的编码习惯? 我认为客户端应该只发出指令,而对象的所有实际操作都是由服务器完成的。 (我目前正在攻读计算机科学学士学位并且非常缺乏经验,所以如果我理解这些概念错误,请纠正我。) 提前致谢!

是否总是使用get和set方法来访问类自己的成员字段?

在Java类中,使用getter和setter访问成员字段是不是很好或者不好? 比如哪个更好: public Order { private Agreement agreement; public Agreement getAgreement() { return agreement; } public void process() { //should I use: getAgreement().doSomething(); //Or: agreement.doSomething(); } } 一般来说,我认为直接访问该字段最好是由于KISS原则,并且有人可能会在以后使用不可预测的结果覆盖get方法。 然而,我的同事认为保留一层抽象更好。 对此有何共识?

为什么用Java检查双重检查锁定?

据说,除了long或double字段外,字段赋值总是primefaces的。 但是,当我读到为什么双重检查锁定被破坏的解释时,它说问题在于赋值操作: // Broken multithreaded version // “Double-Checked Locking” idiom class Foo { private Helper helper = null; public Helper getHelper() { if (helper == null) { synchronized(this) { if (helper == null) { helper = new Helper(); } } } return helper; } // other functions and members… } 线程A注意到该值未初始化,因此它获得锁定并开始初始化该值。 由于某些编程语言的语义,允许编译器生成的代码在A完成初始化之前更新共享变量以指向部分构造的对象。 线程B注意到共享变量已初始化(或显示),并返回其值。 因为线程B认为该值已经初始化,所以它不会获得锁定。 如果B在B看到A完成的所有初始化之前使用该对象(因为A尚未完成初始化或者因为对象中的某些初始化值尚未渗透到内存B使用(缓存一致性)) […]