我想知道使用贫血区域模型的优点和缺点(请参阅下面的链接)。 福勒文章
据我所知,尽pipeOOP教育,语言和工具耗费了数百万甚至数十亿,但OOP并没有提高开发人员的生产力或软件可靠性,也没有降低开发成本。 很less有人使用面向对象的方式(很less有人坚持或理解LSP的原理); 人们对问题领域build模的方法似乎很less统一或一致。 通常,这个class级只是用于语法糖; 它将loggingtypes的函数放入自己的小名字空间中。 我为各种应用程序编写了大量的代码。 虽然有一些地方真正可替代的子types在应用程序中扮演了重要的angular色,但这些都是非常特殊的。 一般来说,虽然口头上说“重用”,但实际情况是,除非一段代码完全符合你的要求,否则几乎没有成本效益的“重用”。 将类devise为可扩展的方式是非常困难的,因此扩展的成本通常非常高,“重用”根本就是不值得的。 在很多方面,这并不令我感到意外。 现实世界不是“OO”,OO中隐含的想法 – 我们可以用某种分类法来模拟事物 – 在我看来,这在本质上是非常有缺陷的(我可以坐在桌子,树桩,汽车发动机罩上,某人的膝盖 – 但不是其中之一 – 椅子)。 即使我们转向更抽象的领域,面向对象build模往往是困难的,违反直觉的,并最终无益(考虑圆/椭圆或正方形/矩形的经典例子)。 那么我在这里错过了什么? 面向对象的价值在哪里,为什么所有的时间和金钱都不能使软件更好?
从编码风格的angular度来看,循环类的依赖性是不是很糟糕? 例: 在数据库应用程序中,我们有两个类,一个封装有关单个数据库( DBInfo )的信息和一个可以创build数据库连接的类。 ( ConnFactory ) DBInfo有一个使用ConnFactory创build连接的getConnection方法。 但是ConnFactory本身需要一个DBInfo对象来这样做。 像这样:(为了可读性,任何编码风格都被忽视) class DBInfo { String name; String connectionUrl; Connection getConnection() { return ConnFactory.getConnection(this); } } class ConnFactory { Connection getConnection(DBInfo toWhat) { return new Connection(toWhat.connectionUrl); } } 我的同事们认为这是不好的做法,如果只有一个方向的依赖关系,而不是像这里那样的循环方向,那会更好。 这是不好的做法,反模式还是代码味道? 有什么缺点吗?
上周我偶然发现了作者在第二页上提到的这篇文章 : 请注意,这会产生整数边权重的线性运行时间。 第三页也一样: 这对于整数边的权重产生线性运行时间,对于基于比较的sorting产生O(m log n)。 并在第8页: 特别是使用快速整数sorting可能会大大加速GPA。 这是否意味着在特殊情况下有整数值的O(n)sortingalgorithm? 或者这是图论的一个特点? PS: 可能参考文献[3]可能会有帮助,因为在第一页他们说: graphics类的整体边权重[3],[…] 但我没有任何科学期刊。
“参数”和“参数”之间有区别,还是仅仅是同义词?
asynchronous调用是否总是创build一个新的线程? 两者有什么区别? asynchronous调用是否总是创build或使用新的线程? 维基百科说 : 在计算机编程中,asynchronous事件是独立于主程序stream程发生的事件。 asynchronous操作是在非阻塞scheme中执行的操作,允许主程序stream继续处理。 我知道asynchronous调用可以在单线程上完成吗? 这怎么可能?
可能重复: 参数或参数? 我得到了参数和参数types的混合,并没有真正注意什么时候使用一个什么时候使用另一个。 你能告诉我吗?
什么是最好的(或尽可能)一般的SVN忽略模式使用? 有许多不同的IDE,编辑器,编译器,插件,平台等特定的文件和一些“重叠”的文件types(即对于某些types的项目而不是其他的)。 但是,不pipe您的开发环境的具体情况如何,您都不会自动将其包含在源代码pipe理中的大量文件types。 对于这个问题的答案可以作为任何项目的一个很好的起点 – 只要求他们添加他们需要的less数环境特定项目。 它也可以适用于其他版本控制系统(VCS)。
当我在大学攻读CS时(80年代中期),其中一个不断被重复的想法是总是写出循环testing在顶部(while …),而不是在底部(做… while)循环。 这些概念往往是支持与研究的参考,表明在顶部testing循环统计更有可能是正确的比底部testing的同行。 结果,我几乎总是写回路在顶部testing。 我不这样做,如果它在代码中引入额外的复杂性,但这种情况似乎很less。 我注意到一些程序员倾向于专门编写在底部testing的循环。 当我看到像这样的结构: if (condition) { do { … } while (same condition); } 或者反过来( if在内部的话),这让我怀疑他们是不是真的这样写了它,或者当他们意识到循环没有处理空情况时添加了if语句。 我做了一些Googlesearch,但一直没能find关于这个主题的任何文献。 你们(和加尔)如何写你的循环?
在几种现代编程语言(包括C ++,Java和C#)中,该语言允许在运行时发生整数溢出 ,而不会引起任何types的错误情况。 例如,考虑这个(人为的)C#方法,它不考虑上溢/下溢的可能性。 (为了简洁,该方法也不处理指定列表为空引用的情况。) //Returns the sum of the values in the specified list. private static int sumList(List<int> list) { int sum = 0; foreach (int listItem in list) { sum += listItem; } return sum; } 如果这个方法被调用如下: List<int> list = new List<int>(); list.Add(2000000000); list.Add(2000000000); int sum = sumList(list); sumList()方法中会发生溢出(因为C#中的inttypes是一个32位有符号整数,并且列表中的值的总和超过了最大32位有符号整数的值)。 sumvariables的值是-294967296(不是4000000000的值)。 这最有可能不是sumList方法的(假设的)开发者所期望的。 显然,开发人员可以使用各种技术来避免整数溢出的可能性,例如在Java中使用BigIntegertypes或C#中的checked关键字和/checked编译器开关。 然而,我感兴趣的问题是为什么这些语言默认情况下允许整数溢出发生,而不是在例如运行时执行操作时引发exception溢出。 […]