Tag: oop

JavaScript:好的部分 – 如何不使用`new`

Crockford的书“ JavaScript:The Good Parts ”(第114页)说,构造函数应该总是以大写字母(例如Point)给出名称,并且只能使用具有首字母大写字母的函数名称其他的一切都应该小一些)。 这个约定帮助我们避免忘记在构造函数中使用new操作符。 他接着说: “更好的应对策略是不使用new的。” 我的问题是,我们如何编写JavaScript而不使用new的呢? 我们可以用文字{}和[]来避免new Object()和new Array() 。 我们可以避免使用0 , true和'' new Number() , new Boolean()和new String() 。 我们可以避免使用类似/pattern/ new RegExp() 。 我们如何避免new Date() ? 而且,最重要的是,我们如何避免在我们自己的自定义对象中使用new ?

固体与YAGNI

我所听到的最不经意的论据之一就是YAGNI (虽然论者经常不这样认为): “把特征X和特征Y放到同一个类中是可以的,为什么还要添加一个新类(即复杂性)就这么简单。 “是的,我可以把所有的业务逻辑直接放到GUI代码中,这样做更容易,更快捷,这将是唯一的GUI,而且不可能有重大的新需求。” “如果出现新的要求,我的代码变得太混乱,我仍然可以重新devise新的要求,所以你的'如果你以后需要…'这个参数不计算在内。 你最有说服力的反对这种做法的是什么? 我怎么能真正表明这是一个昂贵的做法,特别是对于没有太多软件开发经验的人来说。

多less抽象是太多了?

在一个面向对象的程序中: 多less抽象是太多了? 多less是正确的? 我一直是一个坚强的人。 我理解高级封装和抽象背后的概念,但总是感到本能地认为添加太多会混淆程序。 我总是试图拍摄一些抽象的东西,没有留下任何空的类或层。 而在有疑问的地方,我不会在层次结构中添加新的图层,而是尝试将某些东西放入现有图层中。 但是,最近我遇到了更高度抽象的系统。 系统中所有可能需要在层次结构中进行表示的事物都可以在前面find。 这导致了很多空的层次,最初看起来像糟糕的devise。 然而,第二个想法是,我已经意识到,留下那些空白的层让你有更多的地方在未来没有太多的重构。 它让你有更大的能力在老的基础上添加新的function,而不用做太多的工作来调整旧的function。 这两个风险似乎是你可以得到你需要的图层错误。 在这种情况下,人们仍然需要做大量的重构来扩展代码,并且仍然会有大量从未使用过的图层。 但是,取决于花费多less时间来提出最初的抽象概念,把它搞砸的可能性,以及如果得到正确的结果,以后可以节省的时间 – 可能还是值得去尝试。 我能想到的另一个风险就是过度做这件事的风险,而且从来不需要所有额外的层次。 但是那真的很糟糕? 额外的课程层次是否真的如此昂贵,以至于如果他们从未被使用过,那么这是多么的失败? 这里最大的开销和损失将是时间,这是失去了前面的层数。 但是,大部分时间仍然可以在以后使用抽象代码而不是更底层的代码来保存。 那么什么时候太多? 什么时候空的层和额外的“可能需要”抽象成为矫枉过正? 多less太less? 甜蜜点在哪里? 在你的职业生涯中,你有没有find可靠的经验法则来帮助你判断所需的抽象数量?

我为什么要使用接口?

我明白,他们强迫你实施方法等,但我不明白的是为什么你会想要使用它们。 有谁能给我一个很好的例子或解释为什么我想要实现这一点。

这个类有多less构造函数?

我正在为即将到来的C ++考试做准备,并且遇到了关于类和构造函数的这个问题: class级有多less构造函数?“ class Fraction { //… public: Fraction(int numerator = 0, int denominator = 1); //… }; 我认为这只是一个,但他们build议有三个: Fraction(); Fraction(n); Fraction(n, d); 换句话说: 是一个函数的默认值重载函数?

为什么我会用装饰者的责任链?

我只是阅读责任链模式,我很难想象一个场景,当我更喜欢它的使用,而不是装饰 。 你怎么看? CoR是否有利基用途?

修改Twitter Bootstrap折叠插件,以保持手风琴打开

我试图修改Bootstrap折叠插件,让我指定是否点击一个手风琴(打开)应该自动closures手风琴中的其他项目(因此可以一次打开手风琴中的多个项目) 我想在手风琴上创build一个新的数据属性,比如data-collapse-type="auto|manual" bootstrap jQuery插件对于我的技能水平来说有点高级。 我所需要的最相关的部分似乎是在第52行, actives.collapse('hide') 。 如果设置了'data-collapse-type ='manual''(省略属性或设置auto应该保持默认行为),我不希望发生这种情况。 我创造了一个我已经实践的jsfiddle 。 任何人都可以帮助让我在这个正确的轨道?

我如何devise一个没有ORM且没有embedded式SQL的Java Web应用程序

编辑:原始标题:关于使用ORM的好处的问题。 我想使用ORM进行学习,并尝试使用nhibernate。 我正在使用教程,然后我有一个真正的项目。 我可以走“老路”或使用ORM。 我不确定我完全理解这个好处。 一方面,我可以在代码中创build我的抽象,以便可以更改我的数据库并独立于数据库。 另一方面,如果我真的改变数据库列,我必须改变我所有的代码。 为什么我不能没有我的应用程序没有ORM,改变我的数据库和改变我的代码,而不是改变我的数据库,ORM和代码? 他们的数据库结构是不是变化太大了? 我相信有这样的好处,因为ORM被这么多人使用。 我只是不确定我还没有得到它。 谢谢。 编辑:在教程中他们有许多文件,用于使ORM的工作 http://www.hibernate.org/362.html 在应用程序发生变化的情况下,只是说我有“适当”的抽象层,似乎还有很多额外的工作。 因为我是新手,看起来并不那么容易维护,再次看起来像额外的工作,而不是更less。 编辑:这是一个老问题,我不断回来。 我想看看如果正确地devise没有ORM的应用程序,没有使用embedded式SQL,也没有使用.NET LINQ-to-SQL,没有违法的例子。 我现在在Java世界,而且我迷失在如何继续。 这是一个Web应用程序。 没有spring,没有其他世俗的框架。 JSP,JSTL,EL,HTML,JavaScript,CSS,Java,Tomcat。 希望我没有留下任何东西。 是的,我知道这是一个古老的问题。 这仍然是相关的。

耦合和凝聚力

我试图简化耦合和凝聚力的概念,以一个简洁的定义。 有人能给我一个简短的和可以理解的解释(比维基百科的定义在这里和这里更短)吗? 他们如何互动? 谢谢。 任何人都有一个很好的例子吗?

访问同一class级另一个对象的私人领域

class Person { private BankAccount account; Person(BankAccount account) { this.account = account; } public Person someMethod(Person person) { //Why accessing private field is possible? BankAccount a = person.account; } } 请忘记devise。 我知道OOP指定私有对象对于类是私有的。 我的问题是,为什么面向对象的devise使得私有领域具有类级别的访问权限而不是对象级别的访问权限 ?