特定のソフトウェアは「非常に信頼できる」、またはマイクロソフトは「意見のない」フレームワークを書く傾向があると言っている人をよく見ます。これは実際にはどういう意味ですか?
フレームワークが考えられている場合、それはあなたを物事のやり方にロックするか、ガイドします。
例:一部の人々は、テンプレートシステムはユーザー定義のメソッドや関数へのアクセスを提供すべきではないと考えています。これは、システムが未加工のHTMLを返すことを可能にします。したがって、信念のあるフレームワーク開発者はデータ構造へのアクセスのみを許可します。設計により、ソフトウェアは制限されており、設計者が自分のやり方で物事を行うことを奨励しています。
別の例( 信号リンクから取得 )は wiki の例です。ウィキの設計者は多くの意見を持っていました。彼らはHTMLが人々にとっては書くには複雑すぎると考えていたので、コンテンツを更新するより自然な方法だと思ったものを思いつきました。彼らはまた、デザインよりもコンテンツに重点を置くべきだと感じたため、派手なデザインを削除しました。
Appleは製品を設計するときに強い意見を持っています。
未意見のソフトウェア設計はPerl/PHPに似ています。これにより、開発者は開発者が適切な決定を下せるようになり、開発者が自分の手でコントロールできるようになります。
また、マイクロソフトを非意見のコラムに入れます。未意見のMicrosoftフレームワークの良い例:.NET
。 CLRと仕様を開くことで、あらゆる種類の言語と実装スタイルに対応しました。
意見の多いソフトウェアは、基本的に1つの方法(正しい方法™)があり、別の方法でそれをしようとすると困難でイライラすることを意味します。一方、正しい方法™で物事を行うと、行うべき決定の数が減り、ソフトウェア設計者の集中力が低下するため、ソフトウェアでの開発が非常に簡単になります。ソフトウェアが機能するようになります。問題が解決策にうまくマッピングされている場合、優れたソフトウェアを使用するのは素晴らしいことです。提供されているツールにマッピングされない問題の部分を解決するのは、本当に苦痛です。ここでの例はRuby on Railsです。
一方、非意見のソフトウェアは、ユーザー(開発者)に多くの柔軟性を与えます。問題を解決する1つの方法を禁止していませんが、さまざまな方法で問題を解決するために使用できる柔軟なツールを提供します。この欠点は、ツールが非常に柔軟であるため、ソリューションの開発が比較的困難になる可能性があることです。フレームワークでは十分なヘルプが提供されないため、ユーザー(開発者)がさらに多くのソリューションを手作業でコーディングする必要があります。また、ソリューションを提供する方法についてより多くのことを考える必要があり、平凡な開発者は、何らかの意見のあるソフトウェアを購入した場合よりも貧弱なソリューションになってしまう可能性があります。 Perlはおそらく、非意見のソフトウェアの典型的な例でしょう。
私の理想は、非意見のフレームワークですが、強力な慣習があるものです。 ASP.NET MVCをこのカテゴリに入れます。実際には、すべてのソフトウェアはある程度意見があります(おそらくPerlではありません)。 MVCには、モデルの選択に強力な規則がありますが、それらの規則内の問題を解決するためのさまざまな方法が用意されています。これらの方法のいくつかは、モデルを壊すことさえあります。ただし、このようなフレームワークで開発している規則に従って正しく使用すれば、本当に嬉しくなります。
それは基本的に、すべての人を喜ばせようとするのではなく、作者がそれが機能するはずだと考える方法で機能するソフトウェアです。それは多くの人がそれを好まないが、そうする人はそれを愛することを意味します。
Railsはおそらく、フレームワークの標準的な例です。あなたは自分のやり方で物事を行い、すべてがスムーズです。そうでない場合は、いくつかの痛みがあります。しかし、それは大丈夫です-自分のやり方でやりたくない場合は、Railsを使いたくありません。
バランスをとるために、私は(他の回答のいくつかとは対照的に)意見のあるアプローチに有利な(むしろ意見のある)説明を提供します。
意見の多いフレームワークは、「黄金の道」を提供します。これは、ほとんどの人とほとんどのシナリオ(著者の目には)のベストプラクティスであると考えられています。
ただし、これは必ずしもロックインを意味するわけではありません。これは、物事を別の方法で行うために追加の努力が必要になる場合があることを意味します。
あまり考えられていないフレームワークは、多くの異なるオプションを提供し、決定するのはあなた次第です。
意見の多いフレームワークは、通常、開発者の負担を取り除き、車輪を再発明したり、同じ問題を何度も再考したりするため、実際の問題に集中するのに役立ちます。
オープンソースの世界では、多くの意見はあるが競合するフレームワークを見つけることができるので、選択肢があります。独自のゴールデンパスを選択する必要があります。
優れたソフトウェアは、特定の方法で物事を簡単に行えるように構築および設計されています。他のデザインパターンよりも特定のデザインパターンを優先します。その過程で、それが開発されたソフトウェア開発のスタイルから逸脱することが難しくなります。別の言い方をすれば、「構成より規約」を優先することです。つまり、ソフトウェアが多くの構成面を想定しているため、構成オプションは非常に限られています。前提条件が理解されると、意見のあるソフトウェアは通常、より早く習得できます。
一方、未熟なソフトウェアはほとんど仮定をしません。その結果、未開発のソフトウェア/ソフトウェア開発フレームワークには、多くの構成オプションがある傾向があります。開発者は通常、ソフトウェアのさまざまな側面に関して多くの決定を行う必要があります。多くの場合、これらの膨大なオプションを簡単に処理できるように、さまざまなツールが開発されています。例えばVisual Studio .NET for .NET、Eclipse IDE for Javaなど。未熟なソフトウェアは、通常、熟考されたソフトウェアよりもマスターに時間がかかります。
tl; dr:
多くの人がASP.NET MVCを「独自の」フレームワークと呼んでいますが、私はそれについていくつかの考えを検討したいと思いました。
ASP.NET MVCがそれほど義務付けられていないのは事実です。 Linq-to-SQL、ADO.NETエンティティ、NHibernateなど、好きな永続化ソリューションを使用できます。
反対に、MVCフレームワークは「構成よりも慣習」を好む傾向があり、Phil Haackの言葉を引用すると、コントローラー、ビュー、モデル、その他のコードを見つけるための定義済みパターンに従うことを強く推奨しています。この動作は変更できますが、現在の状態で泳ぐのは簡単です。ほとんどの人にとっては、問題なく実行できます。
また、ASP.NET MVCを取り巻く多くの意見を述べる人々がいます。ユニットテストと依存性注入。私は皆、良いテストと懸念の分離を求めていますが、そのようなトピックは少しのぞき込まれていると思います。
繰り返しになりますが、これらの領域では、フレームワーク自体が、必要なユニットテストソリューション、および使用する依存性注入およびモックフレームワークを完全に採用できることを認める必要があります。ユニットテストなどの「バイブルバッシング」の範囲内であっても、柔軟性は継続しているようです。
フレームワークに実装されている規則の量と、行われた決定の数です。
たとえば、フォームアクションをコントローラーアクションに送信する方法が5つ(またはそれ以上)ある場合(ASP.NET MVCの場合)、フレームワークはかなり「意見のない」ようです-決定は下されていますあなたへ!
ただし、フレームワークが(他の方法を直接無効にするか、強力に奨励することで)そのことを行う方法を1つだけにする場合(Fubu MVCの場合)、フレームワークが決定を下したと言うことができます。 、このようにフレームワークを説得します。
現時点で多く見られる例は、ASP.NET MVCフレームワークです。それは驚くほど拡張可能ですが、それはいくつかの点でその没落であり、それに肉はありません。データアクセスを行いたいですか?それを自分で書く必要があります。いくつかのAJAXが続いていますか?.
ただし、非常に拡張性があるため、それに基づいて構築すれば、それを独断的なフレームワークに変えることができます。これは、 MVCContrib のようなもので、特定の方法で実行できるため、コードを書く必要が少なくなります。
これは、あなたが意見から脱却したい場合、あなたがバニラバージョンで作業していた場合よりも多くの仕事がしばしばあることを意味します。ただし、これは80/20シナリオです。自分の意見に基づいたフレームワークを正しく選択した場合、20%の確率で意見を中断したいだけで、残りの80%の生産性は高くなります。