Visual Studioは、次の2つのテンプレート(簡潔にするために私によって除去ネームスペースとコメント)を作成し、プロジェクトに新しいWCFサービスを追加:YAGNI後WCFでインターフェイスと実装を分離する必要がありますか?
[ServiceContract]
public interface IMyService
{
[OperationContract]
void DoWork();
}
public class MyService : IMyService
{
public void DoWork()
{
}
}
を、私は通常、すぐに
[ServiceContract]
public class MyService
{
[OperationContract]
void DoWork()
{
}
}
にそれを簡素化
このインターフェイスを実装するクラスは常に1つしかなく、には明らかな利点はありません。はすべてを2回入力します。奇妙な予期せぬ理由により、将来別の実装がある場合(または2つのサービスに同じクラスを使用したい場合)、必要なときにいつでもインタフェースを抽出できます。結局のところ、私の外部の世界との契約はWSDLであり、私のコード内のインターフェースではありません。
ただし、Visual Studioで推奨されるベストプラクティスに反するとき、私は常に懐疑的だ、それゆえ私は、コミュニティをお願いしたいと思います:
は、インタフェースとクラスを分割するいくつか明白な利点がありますWCFサービスの先頭から私は行方不明ですか?
答えとしてポストしてください:**テスト**。インターフェイスを模擬するのはかなり簡単です。基本クラスを模擬する(インターフェイスが空ではない限り)、もっと難しいかもしれません。 VS IDEが私のためにすべてのタイピング作業をすることを考えると、私は通常、最初からインターフェイスを持っています。 –
@AdrianoRepetti:WCFサーバーでは、サービスを嘲笑するという点はありません(サービスはテストしたいものなので)。 WCFクライアント(つまりサービスコンシューマ)では、WCFクライアントが自動生成プロキシクラスを使用するため、* server *が内部的にインターフェイスを使用するかどうかに違いはありません。 @ Heinzi kind ofの – Heinzi
。 IMOそれはあなたのサービスをテストする方法に依存します。 _私が_しているのは、できるだけ実装クラスのビューをテストすることです(なぜなら...公開したくないからです)。インターフェイステストのために、私は2つのステップに進みます:インスタンスとテスト全体的なロジック(たとえばワークフローなど)をテストし、すべてのクラスがサービス境界を通じて適切にシリアル化されているかどうかをテストするサービスインスタンス(明らかにローカルにホストされます)を取得します。 –