Expose IRow and IRowSet and hide implementations

Description

Currently, Row and RowSet are classes exposed to the user. Ideally, we would want to expose interfaces and not implementations.

Benefits of exposing interfaces are:

  • Allow further testability of user code / decoupling.

  • Ability to hide implementation details (ie: class inheritance).

  • Support different implementations of the same interface.

The major disadvantage is that its breaking change that can be somehow painful for the user (even though, migrating efforts from the user just involves changing names 1-1).

A little history: C# driver introduced this functionality as classes instead of interfaces in version 1 (circa 2013), while the java driver used interfaces for ResultSet and Row. From 2.0 onwards, breaking changes on the C# driver were avoided whenever possible to limit the impact of maintaining multiple active branches, so we sticked with this misfeature. We made those classes "mockable" (default constructors and some virtual properties instead).

Environment

None

Pull Requests

None

Status

Assignee

Unassigned

Reporter

Jorge Bay Gondra

Labels

PM Priority

None

Fix versions

None

External issue ID

None

Doc Impact

None

Reviewer

None

Pull Request

None

Epic Link

Sprint

Size

None

Priority

Major
Configure