知らなかったよ「ねこび〜ん」!!!。ちょっとキャラがNetBeans公式サイトと違い過ぎでは...。
えーそれはともかく、Eclipseの影に隠れがちに思うNetBeans開発の経験から、Javaで良いライブラリ(API)とはどのようなもので、それをどう作るか、について描かれた本を読んだ。
APIデザインの極意 Java/NetBeansアーキテクト探究ノート
Java本で久々読み応えのある内容でした。実際の経験から導き出された内容が、心にひびきます。
.NET C#でライブラリを公開するときはinterfaceを公開したほうがいいという意見を見かける。UnitTestとかでmock/stubのしやすさからinterfaceを使った方が便利なことは確かにある。
でもC#では、interfaceは後からメソッド追加すると、interfaceをimplementsしてた人たちが残念なことになるのだ。
なので、C#でインターフェース至上主義を突き進むと幸せになれない。interfaceで公開してしまうと後悔するかもなのだよ。
マイクロソフトの「クラス ライブラリ開発のデザイン ガイドライン」にはこうある
インターフェイスよりもクラスを定義するようにしてください。 ライブラリのその後のバージョンで、クラスには新しいメンバーを安全に追加できます。インターフェイスにメンバーを追加すると、既存のコードが破損します。
クラスまたはインターフェイスの選択
日本語訳が変な気がするが、言いたいことはおおむねわかる。 あと、public class Fooを公開したいとき、Fooが内部的なUnitTest用にinternal interface IFooをimplementしたくても、interfaceメソッドを実装するにはpublicメソッドにする必要があり、Fooでinternalにしておきたいメソッドまでpublicにしないといけなくなる。残念。
C#の将来版では、Internal implementation onlyというのができるかも。 C# Design Notes for Feb 4, 2015 · Issue #396 · dotnet/roslyn · GitHub
タイトル書いたら「音声プログラミング」ってなんかヘンだな。ソースコードを音声入力で書く...、とかじゃないですよ。Windowsで音声合成でしゃべらせたり音声認識に関するライブラリを使うってことです。
音声認識 - .NET デスクトップ アプリと音声認識
結論として、音声の使用経験が少ない方が .NET アプリに音声を追加する場合は、System.Speech ライブラリではなく Microsoft.Speech ライブラリを使用することをお勧めします。
...
System.Speech DLL は OS に組み込まれているため、すべての Windows コンピューターにインストールされています。Microsoft.Speech DLL (および関連ランタイムと言語) は、コンピューターにダウンロードしてインストールする必要があります。System.Speech による音声認識は、通常ユーザーのトレーニングが必要です。このトレーニングでは、ユーザーがいくつかのテキストを読み上げ、特定のユーザーの発音を認識するようにシステムが学習します。Microsoft.Speech による音声認識は、すべてのユーザーに対してすぐに動作します。System.Speech はほとんどすべての語を認識できます (自由発話のディクテーション) が、Microsoft.Speech はプログラムで定義した Grammar に当てはまる語やフレーズのみを認識します。 .NET デスクトップ アプリと音声認識
上の記事にMicrosoft.Speech と System.Speech の比較がわかりやすい表になっています。