2009-04-29 83 views
175

我经常看到有人说某些软件“非常有见地”,或者微软倾向于写下“无视”的框架。这实际上意味着什么?什么是自制软件?

+0

关于[程序员.se]:['自以为是的软件'的真正含义是什么?](http://programmers.stackexchange.com/q/12182/63183) – unor 2015-02-25 08:51:58

回答

181

如果一个框架是自以为是的话,它会锁定或引导您进入自己的行事方式。

例如:有些人认为模板系统不应该提供对用户定义的方法和函数的访问,因为它使系统保持打开状态以返回原始HTML。所以一个有见地的框架开发人员只允许访问数据结构。通过设计,该软件限制并鼓励设计师按自己的方式行事。

另一个例子(taken from the signals link)是wiki。维基的设计师有很多意见。他们认为HTML对于人们来说太复杂了,所以他们想出了他们认为更新内容的更自然的方式。他们也剥夺了花哨的设计,因为他们觉得重点应该放在内容上而不是设计上。

苹果在设计产品时有强烈的见解。

无意见的软件设计更像PERL/PHP。它允许开发人员和相信开发人员做出正确的决定并将更多控制权交给他们。

我也会把微软放在非固定的专栏里。一个没有创意的微软框架的好例子:.NET。通过打开CLR和规范,它将它打开成各种语言和实现方式。

+15

我不会说“锁定你”相反,它并不容易偏离“黄金”道路。黄金道路通常是最佳实践,大部分时间对大多数人都适用。 – dpan 2009-04-29 12:19:26

+5

我同意锁具有点强大,但是我会通过注意许多有见识的产品是如何成功来消除这种负面的内涵。 – cgp 2009-04-29 12:27:24

+27

好吧,很显然,这个答案是自以为是的;) – dpan 2009-04-29 12:30:04

21

它基本上是软件,它的作者认为它应该工作的方式,而不是试图取悦每个人。这意味着很多人不会喜欢它,但那些做的人会喜欢它。

Rails可能是一个自以为是的框架的典型例子:你按自己的方式做事,一切都很顺利。如果你不这样做,你会有些痛苦。但是没关系 - 如果你不想用自己的方式做事,你不想使用Rails。

2

这是在一个框架中实施的公约数量和已经采取的决策数量。例如,如果有5种(或更多)不同的方法将表单数据提交给控制器动作(ASP.NET MVC中就是这种情况),该框架似乎相当“不引人注目”这个决定取决于你!但是,如果框架只能通过直接禁用其他方式或强烈鼓励它(只有一种方式)来做这件事(这是Fubu MVC的情况),那么你可以说这个决定是由框架采取,从而使框架的意见。

53

意见软件意味着基本上有一种方法(正确的方式 ™)做事情,试图做不同的事情将是困难和沮丧。另一方面,做事正确的方法 ™可以使得用软件开发非常容易,因为您必须减少的决策数量减少了,软件设计师专注于使软件工作的能力是增加。如果你的问题很好地映射到解决方案,如果做得好,意见软件可以很好用。解决您的问题中未映射到所提供工具的那些部分可能是一个真正的痛苦。这里的一个例子就是Ruby on Rails。另一方面,非个人意见的软件给用户(开发者)留下了很多灵活性。它不禁止解决问题的一种方法,但提供了可用于以多种方式解决问题的灵活工具。这个缺点可能是因为这些工具非常灵活,所以开发任何解决方案可能相对困难。用户(开发人员)可能需要手动编码更多的解决方案,因为该框架没有提供足够的帮助。您还必须考虑更多关于如何提供解决方案的问题,而平庸的开发人员最终可能会因为购买某些自以为是的软件而导致较差的解决方案。 PERL可能是非褒贬不一的软件的典型例子。

我的理想是一个非自负的框架,但有一个强大的约定。我会把ASP.NET MVC放在这个类别中。实际上,所有软件都有一定程度上的自我评估(虽然可能不是PERL)。 MVC在选择模型方面有很强的约定,但是提供了许多不同的方式来解决这些约定中的问题。其中一些方法甚至可能会破坏模型。然而,按照在这样的框架下开发的惯例正确使用可能是一种真正的快乐。

1

您现在将看到很多的例子是ASP.NET MVC框架。它具有惊人的可扩展性,但在某些方面它已经垮台了,没有任何肉。想要做数据访问?你必须自己写。想要一些AJAX吗?同上。

然而,由于它具有高度的可扩展性,如果你在它上面构建它,你可以把它变成一个自以为是的框架。这就是MVCContrib这样的做法,他们给你提供了具体的做事方法,这意味着你必须编写更少的代码。

这确实意味着如果你想从意见中突破,那么通常需要做的工作要比在香草版上工作要多。尽管如此,这是一个80/20的场景。如果你正确地选择了自己的框架,你只需要在20%的时间内打破意见,而其他80%的时间你将会获得高生产率。

6

为了平衡的缘故,我会提供一个更有利于自以为是的方法的描述(与其他一些答案相反)。

意见框架提供了一个“黄金路径”,它被认为是大多数人和大多数场景的最佳实践(在作者眼中)。

但是这并不一定意味着锁定。这意味着它可能需要一些额外的努力才能以不同的方式做事。

不那么自以为是的框架提供了许多不同的选项,并由您决定。

意见框架通常会消除开发人员的重担,重新发明轮子或一次又一次地重新思考同一问题,从而帮助专注于现实问题。

在开源世界中,您可以找到许多自以为是的竞争框架,所以您仍然可以选择。你只需要选择你自己的黄金道路。

3

很多人都把ASP.NET MVC作为一个“unopinionated”框架引用,我只是想在这方面考虑一些想法。

的确,ASP.NET MVC并没有强制要求太多;您可以使用任何您喜欢的持久性解决方案,无论是Linq-to-SQL,ADO.NET Entities,NHibernate等。另一方面,MVC框架倾向于支持“约定优于配置”,引用菲尔哈克,后者严重暗示遵循预先定义的模式来定位控制器,视图,模型和其他代码。虽然你可以改变这种行为,但用目前的方式游泳更容易,对大多数人来说,这样做没有问题。

此外,周围的ASP.NET MVC是很多自以为是的人,我发现导致了很多有偏见的教程坚持覆盖,例如单元测试和依赖注入;我全部都是为了好的测试和关注的分离,但是我确实认为这些主题有点让人费解,通常在提供更多有用的基础知识之前。

还有,我不得不承认,在这些领域内,框架本身完全开放,可以采用任何你想要的单元测试解决方案,以及任何你想使用的依赖注入和模拟框架,所以我猜测提供了另一个灵活性的例子,即使在单元测试的“圣经抨击”等情况下也是如此。

4

意见软件的构建和设计方式使其能够以某种方式轻松完成任务。它比其他人更喜欢某些设计模式。在这个过程中,它很难脱离它开发的软件开发风格。另一种说法是它支持“约定优于配置”。即,配置选项非常有限,因为软件假设了许多配置方面。一旦理解了这些假设,意见软件通常会更快掌握。

另一方面,未经选择的软件几乎没有任何假设。结果,未经选择的软件/软件开发框架通常倾向于具有很多配置选项。开发人员通常必须针对软件的各个方面作出大量决策。通常会开发各种工具,以便更轻松地处理这些巨大的选项。例如适用于.NET的Visual Studio .NET,适用于Java的Eclipse IDE等。未经授权的软件通常需要更长时间才能掌握,而不是自以为是的软件。

2

TL;博士

  • 固执己见:例如Ruby on Rails。有一种特别喜欢做事的方式,并且以这种方式获得很多支持。其他方式做事很难,或者某些系统不可能做到(卡桑德拉想到)。
  • 没有定论的:例如Perl 5。无论任何风格,你都可以做任何你喜欢的事情。所有样式都同样开放,有效且受到支持。