2014-10-04 2 views
0

데이터베이스 작업을 처리하는 클래스가 두 개 있습니다. 하나는 MySQL (DBMySQL)이고 다른 하나는 SQLite (DBSQLite)입니다. 사용자는 사용할 데이터베이스 시스템을 선택합니다.vb.net에서 하나의 이름으로 두 개의 다른 클래스를 참조하는 방법

클래스 내의 함수는 이름이 같지만 데이터베이스의 변형을 처리하기 위해 분명히 약간 다릅니다.

신청서에서 선택한 클래스를 한 이름으로 언급하고 싶습니다. 전역 변수 DB를 설정했습니다.

절차에서 다음을 수행 할 수 있습니다. Dim DB as New DBMySQL (또는 DBSQLite). 이것은 프로 시저 내에서 작동하지만 전역 적으로는 작동하지 않지만 코딩 할 때 모든 기능을 볼 수 있습니다.

대신 DB = New DBMySQL을 사용하면 전역으로 작동하지만 코딩 할 때 클래스 기능이 표시되지 않습니다.

어떤 대안이 있습니까?

+0

'초록 공장 패턴 '을 찾으십니까? – Rahul

답변

0

inheritance의 개념을 사용하고 MustOverride 메서드 및/또는 속성을 사용하여 MustInherit 클래스를 만듭니다.

Public MustInherit Class AbstractDB 

    Public MustOverride Function MyQuery(input As Object) As Object 

    Public MustOverride Sub MyUpdateMethod(input As Object) 

End Class 

Public Class DBMySQL 
    Inherits AbstractDB 

    Public Overrides Function MyQuery(input As Object) As Object 

    End Function 

    Public Overrides Sub MyUpdateMethod(input As Object) 

    End Sub 
End Class 

Public Class DBSQLite 
    Inherits AbstractDB 

    Public Overrides Function MyQuery(input As Object) As Object 

    End Function 

    Public Overrides Sub MyUpdateMethod(input As Object) 

    End Sub 
End Class 

그런 다음 클래스를 사용하려면 DB 유형이 AbstractDB 인 전역 변수를 만듭니다. 그런 다음 DBMySql 또는 DBSQLite를 작성하여 DB 변수에 지정할 수 있습니다. 메서드 이름은 모두 동일한 기본 클래스를 상속하므로 모두 동일합니다. 그러나 파생 된 각 클래스는 자체 메서드의 내용을 채워야합니다.

Dim DB as AbstractDB = New DBMySQL 
+0

감사합니다 숀, 그 작품! 나는 처음에 선언해야만했다 :PublicDB as AbstractDB = New DBMySQL 코딩 할 때 함수를 볼 때 어떤 클래스를 사용할지를 알고있을 때 : DB = New DBSQLite. 다시 한번 감사드립니다. – Jim400

0

인터페이스를 사용할 수도 있습니다.

Public Interface IRepository 
    ' common functions of MySQL and SQLLiteclasses 
End Interface 

Public Class MySQLRepository 
    Implements IRepository 
End Class 

Public Class SQLLiteRepository 
    Implements IRepository 
End Class 

Public Function GetDB(userChoice As String) As IRepository 
If userChoice = "MySQL" Then 
    Return New MySQLRepository() 
Else 
    Return New SQLLiteRepository 
End if 
End Function 

Dim DB As IRepository = GetDB(userChoice) 

이것은 Repository 패턴의 기본 구현입니다. 이 링크의 예제는 C#에 있지만, 아마 알고 있겠지만 VB에서 예제를 찾는 것은 쉽지 않습니다. 다행히도 C#에서 VB 로의 변환이 많이 있습니다.

Sean Skelly가 준 추상 예제도 사용해야합니다. 추상 클래스와 인터페이스의 차이점을 연구하고 싶을 수 있습니다.

+0

예, 상속 및 인터페이스는 서로 다른 두 가지 방법으로 각각 +와 -를 사용합니다. 나를 위해, 그것은 당신의 수업이 좁은 범위 이상으로 다른 것을 할 것인지 아닌지에 달려 있습니다. 그렇다면 여러 인터페이스를 구현할 수 있지만 하나의 유형 만 상속 할 수 있습니다. –

관련 문제