기존 봉인 된 클래스를 올바르게 인터페이스하는 방법은 무엇입니까?

디온 V.

CodeReview에서 내 코드를 검토 한 후 코드를 더 추상적으로 만드는 방법에 대한 질문에 갇혀 있습니다.

여기 에서 볼 수 있듯이 많은 사람들 이 리팩토링하기 쉽도록 ICommandIConnection인터페이스를 만들어야 한다고 제안합니다 .

내 예제에서는를 사용 IConnection하지만 전체도 유효해야합니다 ICommand.

나는 이와 같은 인터페이스를 만들어야한다고 생각했다.

public interface IConnection
{
     //etc...
}

그런 다음에서 MySqlConnection상속 할 수 있도록하려면 다음 과 같이 상속 할 IConnection고유 MySqlConnection한 항목 을 만들어야 합니다.

public class MySqlConnection : MySql.Data.MySqlClient.MySqlConnection, IConnection
{
     //etc...
}

Which would mean the new MySqlConnection would still have its methods and fields, and would inherit from IConnection. I should then be able to write a Database class like this;

public abstract class Database
{
    protected IConnection con;
}

And extend it like this;

public class MySqlDatabase : Database
{
    private override IConnection con = new MySqlConnection();
}

Now, my problem is, MySqlConnection is sealed; I can't extend it and therefore I do not know any option to make this database class abstract.

The question is; is there a proper way to implement the abstraction of Database and if yes, how would I do it?

Please note that this question has nothing to do with the class being a singleton (as shown in my CodeReview post). That problem has been issued and is not relevant to the question.

C.Evenhuis

해당 코드 리뷰에 대한 주석을 읽으면 실제로 사용 IDbConnection하고 IDbCommand자신을 롤링하는 대신 사용을 의미한다고 생각 합니다. 모든 ADO.NET 공급자는 이미이를 구현하고 있습니다.

당신이 원하는 경우 당신은 상속 할 수 DbConnectionIConnection포장MySqlConnection. 모든 DbConnection메서드 를 구현 하고 래핑 된 연결로 릴레이해야합니다.

public sealed class MyMySqlConnection : DbConnection, IConnection
{
    public MyMySqlConnection(MySqlConnection underlyingConnection)
    {
        UnderlyingConnection = underlyingConnection;
    }

    public MySqlConnection UnderlyingConnection
    {
        get;
        private set;
    }

    public override void Open()
    {
        UnderlyingConnection.Open();
    }

    // ...

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

기존 봉인 된 클래스를 올바르게 인터페이스하는 방법은 무엇입니까?

분류에서Dev

중첩 된 개인 클래스 컬렉션이있는 클래스에 대해 operator <<를 올바르게 오버로드하는 방법은 무엇입니까?

분류에서Dev

클래스에서 확장되고 인터페이스를 구현하는 것을 올바르게 반환하는 방법은 무엇입니까?

분류에서Dev

인터페이스를 구현하는 기본 클래스에서 파생 된 인스턴스 목록을 만드는 방법은 무엇입니까?

분류에서Dev

인터넷 연결이 차단 된 상태에서 Maples를 실행하기 위해 iptables를 올바르게 구성하는 방법은 무엇입니까?

분류에서Dev

클래스를 올바르게 인스턴스화하는 방법은 무엇입니까?

분류에서Dev

UIStoryboard를 통해 인스턴스화 된 UITableView를 올바르게 비우는 방법은 무엇입니까?

분류에서Dev

GoogleIdTokenVerifier를 올바르게 인스턴스화하는 방법 / .setAudience ()의 기능은 무엇입니까?

분류에서Dev

선택적 필드가있는 기존 인터페이스에서 축소 된 typescript 인터페이스를 만드는 방법은 무엇입니까?

분류에서Dev

클래스를 올바르게 초기화하는 방법은 무엇입니까? 실룩 거리다

분류에서Dev

여기서 바인드를 올바르게 사용하는 방법은 무엇입니까?

분류에서Dev

데이터가로드되는 동안 AngularJS에서 인터페이스를 올바르게 차단하는 방법은 무엇입니까?

분류에서Dev

Java에서 Number 클래스를 확장하고 다른 클래스에서 실행할 수 있도록 일반 인터페이스를 올바르게 제한하는 방법은 무엇입니까?

분류에서Dev

파이썬의 __import __ () 및 getattr ()을 사용하여 중첩 클래스를 올바르게 인스턴스화하는 방법은 무엇입니까?

분류에서Dev

반환 된 JSON을 C # 클래스로 올바르게 변환하는 방법은 무엇입니까?

분류에서Dev

귀납적 데이터 유형으로 인덱싱 된 데이터 유형을 올바르게 래핑하는 방법은 무엇입니까?

분류에서Dev

Java import 문에서 누락 된 기호를 올바르게 구성하는 방법은 무엇입니까?

분류에서Dev

Java에서 일반 인터페이스를 확장하는 제한된 일반 클래스를 올바르게 작성하는 방법

분류에서Dev

인쇄 크기 및 웹에서 거리를 올바르게 측정하는 방법은 무엇입니까?

분류에서Dev

Record <>에서 확장되는 인터페이스의 교차점을 올바르게 입력하는 방법은 무엇입니까?

분류에서Dev

Record <>에서 확장되는 인터페이스의 교차점을 올바르게 입력하는 방법은 무엇입니까?

분류에서Dev

수신 된 직렬 데이터를 라인으로 올바르게 구문 분석하는 방법은 무엇입니까?

분류에서Dev

태그를 올바르게 인식하는 방법은 무엇입니까?

분류에서Dev

CentOS (VirtualBox에서 실행)에서 2 개의 네트워크 인터페이스를 올바르게 설정하는 방법은 무엇입니까?

분류에서Dev

기본 클래스 (또는 인터페이스)를 동적으로 서브 클래스 (또는 구현)하는 방법은 무엇입니까?

분류에서Dev

테스트에서도 실행중인 스크립트와 관련된 경로를 올바르게 설정하는 방법은 무엇입니까?

분류에서Dev

Web API의 데이터를 WPF의 ListBox에 올바르게 바인딩하는 방법은 무엇입니까?

분류에서Dev

바인딩 된 메서드 또는 함수를 클래스와 구별하는 방법은 무엇입니까?

분류에서Dev

PHP 페이지를 올바르게 인쇄하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    기존 봉인 된 클래스를 올바르게 인터페이스하는 방법은 무엇입니까?

  2. 2

    중첩 된 개인 클래스 컬렉션이있는 클래스에 대해 operator <<를 올바르게 오버로드하는 방법은 무엇입니까?

  3. 3

    클래스에서 확장되고 인터페이스를 구현하는 것을 올바르게 반환하는 방법은 무엇입니까?

  4. 4

    인터페이스를 구현하는 기본 클래스에서 파생 된 인스턴스 목록을 만드는 방법은 무엇입니까?

  5. 5

    인터넷 연결이 차단 된 상태에서 Maples를 실행하기 위해 iptables를 올바르게 구성하는 방법은 무엇입니까?

  6. 6

    클래스를 올바르게 인스턴스화하는 방법은 무엇입니까?

  7. 7

    UIStoryboard를 통해 인스턴스화 된 UITableView를 올바르게 비우는 방법은 무엇입니까?

  8. 8

    GoogleIdTokenVerifier를 올바르게 인스턴스화하는 방법 / .setAudience ()의 기능은 무엇입니까?

  9. 9

    선택적 필드가있는 기존 인터페이스에서 축소 된 typescript 인터페이스를 만드는 방법은 무엇입니까?

  10. 10

    클래스를 올바르게 초기화하는 방법은 무엇입니까? 실룩 거리다

  11. 11

    여기서 바인드를 올바르게 사용하는 방법은 무엇입니까?

  12. 12

    데이터가로드되는 동안 AngularJS에서 인터페이스를 올바르게 차단하는 방법은 무엇입니까?

  13. 13

    Java에서 Number 클래스를 확장하고 다른 클래스에서 실행할 수 있도록 일반 인터페이스를 올바르게 제한하는 방법은 무엇입니까?

  14. 14

    파이썬의 __import __ () 및 getattr ()을 사용하여 중첩 클래스를 올바르게 인스턴스화하는 방법은 무엇입니까?

  15. 15

    반환 된 JSON을 C # 클래스로 올바르게 변환하는 방법은 무엇입니까?

  16. 16

    귀납적 데이터 유형으로 인덱싱 된 데이터 유형을 올바르게 래핑하는 방법은 무엇입니까?

  17. 17

    Java import 문에서 누락 된 기호를 올바르게 구성하는 방법은 무엇입니까?

  18. 18

    Java에서 일반 인터페이스를 확장하는 제한된 일반 클래스를 올바르게 작성하는 방법

  19. 19

    인쇄 크기 및 웹에서 거리를 올바르게 측정하는 방법은 무엇입니까?

  20. 20

    Record <>에서 확장되는 인터페이스의 교차점을 올바르게 입력하는 방법은 무엇입니까?

  21. 21

    Record <>에서 확장되는 인터페이스의 교차점을 올바르게 입력하는 방법은 무엇입니까?

  22. 22

    수신 된 직렬 데이터를 라인으로 올바르게 구문 분석하는 방법은 무엇입니까?

  23. 23

    태그를 올바르게 인식하는 방법은 무엇입니까?

  24. 24

    CentOS (VirtualBox에서 실행)에서 2 개의 네트워크 인터페이스를 올바르게 설정하는 방법은 무엇입니까?

  25. 25

    기본 클래스 (또는 인터페이스)를 동적으로 서브 클래스 (또는 구현)하는 방법은 무엇입니까?

  26. 26

    테스트에서도 실행중인 스크립트와 관련된 경로를 올바르게 설정하는 방법은 무엇입니까?

  27. 27

    Web API의 데이터를 WPF의 ListBox에 올바르게 바인딩하는 방법은 무엇입니까?

  28. 28

    바인딩 된 메서드 또는 함수를 클래스와 구별하는 방법은 무엇입니까?

  29. 29

    PHP 페이지를 올바르게 인쇄하는 방법은 무엇입니까?

뜨겁다태그

보관