2016-06-12 14 views
2

SqlDataReader.Read()IDataReader.Read()を実装していますが、ReadAsync()などの非同期メソッドを使用すると、SqlDataReaderのインターフェイスは表示されません。SqlDataReader.ReadAsync()のインターフェイスがない理由

まず、私が間違っている場合は私を修正してください。

これには理由や正当な理由はありますか?ここにインターフェイスがないことを正当化する、新しい非同期待望のものについて何かありますか?それは少しばかげている。

+0

「OOPを理解していないSQLチーム」の部分は、とにかく非常に大胆な声明です。\ –

+0

@MatiaszFidemraizerそう、言ってはいけません。 –

答えて

8

インターフェイスではメソッド全体が定義されていませんが、共通の抽象クラスDbDataReader which defines ReadAsyncがあります。

ReadAsyncIDataReaderインターフェイスの一部として含める最も重要な理由は、下位互換性の観点からの変更の変更を避けるためです。

IDataReader場合、新しいフレームワークバージョンで ReadAsync、まったく実施されず、これらの実装が破壊されることになる、いわゆるインタフェースに頼る任意ADO.NETプロバイダまたはフレームワークを実装するために任意 データリーダを強制することになります。

おそらく彼らはインターフェイス分離原則を使用することができ、彼らは定期的IDataReaderメンバーの非同期の味を提供することができIDataReaderAsyncと呼ばれる新しいインターフェイスを定義することができます...しかし、少なくとも、彼らはすでに、すでにある基本クラスを提供してきました

System.Data.DataTableReader

System.Data.EntityClient.EntityDataReader

:多くのフレームワーククラスによって導出System.Data.Odbc.OdbcDataReader

System.Data.OleDb.OleDbDataReader

System.Data.OracleClient.OracleDataReader

System.Data.SqlClient.SqlDataReader

...とサードパーティのADO.NETプロバイダのIDataReaderは、DbDataReaderを派生している可能性があります。

関連する問題