什么是自以为是的软件?

zvo*_*kov 200 language-agnostic architecture terminology

我经常看到人们说某些软件"非常自以为是",或者微软倾向于编写"无意见"的框架.这究竟意味着什么?

cgp*_*cgp 206

如果一个框架是固执己见的,它会锁定或引导你进入他们的工作方式.

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

另一个例子(取自信号链接)是wiki的例子.维基的设计者有很多意见.他们认为HTML太复杂,人们无法写,所以他们想出了一种更自然的方式来更新内容.他们也剥夺了它的花哨设计,因为他们觉得重点应该放在内容而不是设计上.

Apple在设计产品时有很强的意见.

毫无疑问的软件设计更像是PERL/PHP.它允许开发人员并信任开发人员做出正确的决策并将更多控制权交给他们.

我也会把微软置于非自以为是的专栏中.微软框架的一个很好的例子,它没有被贬低:.NET.通过打开CLR和规范,它打开了各种语言和实现风格.

  • 嗯,显然这个答案是自以为是;) (32认同)
  • 我不会说"锁定你",而是不容易偏离"黄金"路径.黄金路径通常是最佳实践,大多数时候应该适用于大多数人. (18认同)
  • 一个固定意见的框架是一个设计得如此有条理的框架,当框架的使用方式不违反框架设计者的假设时,用户将体验到该框架最少的边缘. (6认同)
  • 我同意锁有点强,但是我注意到许多自以为是的产品是多么成功,从而消除了这种负面含义. (5认同)
  • 我同意altCognito..NET*鼓励*开发人员在WinForms应用程序中混合使用模型和视图,例如,让业务逻辑很容易将业务逻辑放在按钮点击事件生成的方法中.通过这种方式,Microsoft间接鼓励短视的开发人员将他们的代码锁定到他们的框架中.更简洁的设计将强制执行或鼓励更好的实践,例如在单独的模块中强制按钮单击方法使用模型逻辑调用第二个函数.并非在.NET中无法实现干净的设计,默认情况下不会鼓励它. (2认同)

tva*_*son 62

意见软件意味着基本上有一种方式(正确的方法)来做事情,尝试以不同方式做事将是困难和令人沮丧的.另一方面,以正确的方式做事可以使软件开发变得非常容易,因为您必须做出的决策数量减少,软件设计人员专注于使软件工作的能力也会提高.如果您的问题很好地映射到解决方案,那么使用意见的软件可以很好用.解决问题中未映射到所提供工具的那些部分可能是一个真正的痛苦.这里的一个例子是Ruby on Rails.

另一方面,非固定标准的软件为用户(开发人员)留下了很多灵活性.它没有禁止解决问题的一种方法,但提供了可用于以多种方式解决问题的灵活工具.这可能是因为工具非常灵活,因此开发任何解决方案可能相对困难.更多的解决方案可能必须由用户(开发人员)手动编码,因为框架没有提供足够的帮助.您还必须考虑更多关于如何提供解决方案的问题,而平庸的开发人员可能最终得到的解决方案比他们购买某些固定软件的解决方案更差.PERL可能是非固化软件的典型例子.

我的理想是一个非自以为是的框架,但具有强烈的惯例.我会把ASP.NET MVC放在这个类别中.实际上,所有软件在某种程度上都是固执的(尽管可能不是PERL).MVC在选择模型时有很强的约定,但提供了许多不同的方法来解决这些约定中的问题.其中一些方法甚至可能打破模型.然而,正确使用,根据在这样的框架中发展的惯例可能是一个真正的快乐.


Ryt*_*mis 22

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

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


dpa*_*pan 8

为了平衡,我将提供一个(相当自以为是)的描述,这种描述更有利于自以为是的方法(与其他一些答案形成对比).

意见框架提供了一条"黄金道路",这应该是大多数人和大多数场景(在作者眼中)的最佳实践.

然而,这并不一定意味着锁定.这意味着可能需要一些额外的努力来做不同的事情.

较少见解的框架提供了许多不同的选项,由您决定.

意见框架通常可以消除开发人员重新发明轮子的负担,或者一次又一次地重新考虑同样的问题,从而有助于专注于手头的真正问题.

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


Kun*_*nal 5

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

另一方面,Unopinionated软件几乎没有假设.因此,不受影响的软件/软件开发框架往往具有许多配置选项.开发人员通常必须就软件的各个方面做出很多决定.通常,开发了各种工具,以便更容易地处理这些巨大的选项.例如,用于.NET的Visual Studio .NET,用于Java的Eclipse IDE等.无需定义的软件通常比固定软件需要更长的时间来掌握.


00p*_*eus 5

tl;博士:

  • 意见:例如Ruby on Rails.有一种特别优选的做事方式,你可以通过这种方式得到很多支持.以其他方式做事很难,或者某些系统不可能(Cassandra浮现在脑海中).
  • 不言自明:例如Perl 5.你可以用任何方式做任何你喜欢的事情.所有款式均同样开放,有效且受支持.