我对代码完整的书中的段落有些困惑。 在“要避免的类”一节中,其内容如下: “避免以动词命名的类只有行为但没有数据的类通常不是真正的类,考虑将类DatabaseInitialization()或StringBuilder()转换为其他类的例程” 我的代码主要由没有数据的动词类组成。 有invoicereaders,pricecalculators,messagebuilders等我这样做集中每个类的任务。 然后我将其他类的依赖添加到其他function。 如果我正确理解段落,我应该使用类似的代码 class Webservice : IInvoiceReader, IArticleReader { public IList<Invoice> GetInvoices(); public IList<Article> GetArticles(); } 而不是 class InvoiceReader : IInvoiceReader { public InvoiceReader(IDataProvider dataProvider); public IList<Invoice> GetInvoices(); } class ArticleReader : IArticleReader { public ArticleReader(IDataProvider dataProvider); public IList<Article> GetArticles(); } 编辑感谢所有的答复。 我的结论是,我目前的代码比OO更多的SRP,但它也遭受“贫血域模型”。 我相信这些见解将会对我有所帮助。
许多Java框架类实现Iterable ,但String不。 迭代String字符是有意义的,就像迭代常规数组中的项一样。 String没有实现Iterable的原因吗?
我简直无法find任何我应该包括在我的特征graphics中的文档。 列出的唯一信息是: 1024w x 500h 24位PNG或JPEG(无alpha) 将缩小到微型或微型 但是它应包含哪些内容? 谢谢你的帮助。
有什么我可以做IE浏览器显示表单元格为实际块? 鉴于这种风格: table,tbody,tr,td,div { display: block; border: 1px solid #0f0; padding: 4px; } 和这个html: <table> <tbody> <tr> <td>R1C1</td> <td>R1C2</td> <td>R1C3</td> </tr> </tbody> </table> <div> <div> <div> <div>R1C1</div> <div>R1C2</div> <div>R1C3</div> </div> </div> </div> 该表格与Firefox和Safari / Chrome中的嵌套div完全相同。 但在Internet Explorer(8)中,属性display: block没有任何效果。 表格完全呈现,就好像我没有设置该属性。 我的主要问题是细胞不会破裂; 他们都在一条线上呈现。 ( tbody和tr元素没有边界,也没有填充,但是现在对我来说不是问题)。 search时,我没有发现任何有关这个问题的信息。 在quirksmode和其他地方的兼容性图表display: block IE自5.5版起支持display: block 。 任何关于表格显示问题的讨论似乎都是在做相反的事情 – 给予非表格元素的任何display: table-*属性。 所以再一次,有什么我可以做IE来渲染表格单元格块吗? (真正的表格实际上是一张表格,里面有表格数据,我想保持这种状态,并且不加扰动地重新设置它。)
RVO( 返回值优化 )是保证还是适用于C ++编译器(特别是GCC)中的所有对象和情况? 如果答案是“否”,那么这个类/对象的优化的条件是什么? 我如何强制或鼓励编译器对特定的返回值执行RVO?
UUID规范定义了4个预定义的命名空间,它被描述为“潜在的有趣的”,意思是“如果其他人在这个命名空间中生成了UUID,你可以validation它们:” DNS的6ba7b810-9dad-11d1-80b4-00c04fd430c8 6ba7b811-9dad-11d1-80b4-00c04fd430c8的URL 6ba7b812-9dad-11d1-80b4-00c04fd430c8 ISO OID 6ba7b814-9dad-11d1-80b4-00c04fd430c8于X.500 DN的6ba7b814-9dad-11d1-80b4-00c04fd430c8 这些来自哪里? 特别; 如果我生成我自己的命名空间UUID,我是否需要避免什么特别? 我知道UUID空间有多大,但是这对碰撞有什么意义吗? 为什么他们select第四个八位字节作为UUID的“版本号”来增加? 我的问题意味着我错过了一些关于UUID的基本知识吗?
我在问一个很简单的问题,但是我有点困惑。 假设我有一个class级Parent : public class Parent { int name; } 并有另一个类Child.java : public class Child extends Parent{ int salary; } 最后是我的Main.java类 public class Main { public static void main(String[] args) { Parent parent = new Child(); parent.name= "abcd"; } } 如果我做一个孩子的对象 Child child = new Child(): 然后, child对象可以访问name and salaryvariables。 我的问题是: Parent parent = new […]
我现在正在做一些关于智能电视发展的研究,这个话题似乎非常分散。 我的意思是: 如果你想开发一个android应用程序,你会得到eclipse和android sdk。 如果你想开发iPhone,你得到的Xcode。 但是SmartTV? 有一个三星SDK,一个LG SDK,Google TV,一个SmartTV Alliance SDK … 那么我应该select什么? 特别是如果我想 写一次,到处跑 享受成熟的开发环境和工具
在“Java并发实践”一书中,我们多次被告知,我们程序的指令可以由编译器,JVM在运行时甚至处理器进行重新sorting。 所以我们应该假定被执行的程序不会按照我们在源代码中指定的顺序执行它的指令。 然而,讨论Java内存模型的最后一章提供了“ 发生之前”规则的列表,指示JVM保留哪些指令sorting。 第一条规则是: “程序顺序规则。线程中的每个动作都发生在该线程中的每个动作之前,这些动作在程序顺序中稍后进行。 我相信“程序顺序”是指源代码。 我的问题是 :假设这条规则,我想知道什么样的指令可能会被重新sorting。 “行动”定义如下: Java内存模型是根据操作来指定的,包括对variables的读写操作,监视器的locking和解锁,以及与线程的启动和连接。 JMM定义了在程序中的所有操作之前发生的部分sorting。 为了保证执行动作B的线程可以看到动作A的结果(不pipeA和B是否出现在不同的线程中),在A和B之间的关系之前必定有一个事件发生。如果在两个操作,JVM可以自由地对其进行重新sorting。 其他提到的订单规则是: 监视locking规则。 在同一监视器锁上的每个后续锁之前,都会发生监视器锁的解锁。 易变的规则。 写入到易失性字段会在每次后续读取相同字段之前发生。 线程启动规则。 线程上的Thread.start调用在启动线程中的每个操作之前发生。 线程终止规则。 线程中的任何动作发生在任何其他线程检测到线程已终止之前,无论是从Thread.join成功返回还是由Thread.isAlive返回false。 中断规则。 另一个线程上的线程调用中断发生在被中断的线程检测到中断之前(通过抛出InterruptedException或者调用isInterrupted或者中断)。 终结者规则。 对象的构造函数的结束发生在该对象的终结器开始之前。 及物。 如果A发生在B之前,B发生在C之前,那么A发生在C之前。
分配给像var=foo这样的variables和使用let let var=foo之间有什么区别? 还是像var=${var}bar和let var+=bar ? 每种方法的优点和缺点是什么?