Hallo,
ich wollte hier von irgendwelchen Strings in denen ich diverse Informationen "enkodiert" habe (so was wie "1;bla;true") wegkommen und das ganze mit einem Objekt eines eigenen Datentyps machen. Deswegen habe ich einen Branch angelegt und mal was ausprobiert. Inzwischen habe ich auch eine Lösung gefunden mit der allerdings FxCop nicht zufrieden ist. Meine Lösung sieht so aus:
Und dies nutze ich in folgenden Formen:
Ich habe also eine übergeordnete Klasse "HistoryItem" mit zwei Attributen, welche die beiden Klassen "HistoryItemWindow" und "HistoryItemSearchResult" gemeinsam haben. Die beiden Klassen haben aber natürlich auch Attribute, die sich speziell auf sie beziehen. Ich brauche z.B. keinen "SearchTerm" bei einem "HistoryItemWindow". "HistoryItemWindow" und "HistoryItemSearchResult" haben beide Konstruktoren, damit ich ein Objekt diesen Typs darüber instanziieren kann.
Jedenfalls habe ich mit dieser Lösung wohl gegen den guten Geschmack verstoßen. FxCop meint:
Wie kriege ich das sauber hin?
Grüße
concu
Edit by ~blaze~:
*Codetag zu VB.Net geändert*
ich wollte hier von irgendwelchen Strings in denen ich diverse Informationen "enkodiert" habe (so was wie "1;bla;true") wegkommen und das ganze mit einem Objekt eines eigenen Datentyps machen. Deswegen habe ich einen Branch angelegt und mal was ausprobiert. Inzwischen habe ich auch eine Lösung gefunden mit der allerdings FxCop nicht zufrieden ist. Meine Lösung sieht so aus:
VB.NET-Quellcode
- Public MustInherit Class HistoryItem
- Private _identifier As Integer
- Private _title As String
- Public ReadOnly Property Identifier As Integer
- Get
- Return _identifier
- End Get
- End Property
- Public ReadOnly Property Title As String
- Get
- Return _title
- End Get
- End Property
- Public Overrides Function toString() As String
- Return _title
- End Function
- Public Class HistoryItemWindow
- Inherits HistoryItem
- Private _filmnr As Integer
- Public ReadOnly Property Filmnr As Integer
- Get
- Return _filmnr
- End Get
- End Property
- Public Sub New(title As String, identifier As Integer, filmnr As Integer)
- MyBase._title = title
- MyBase._identifier = identifier
- Me._filmnr = filmnr
- End Sub
- End Class
- Public Class HistoryItemSearchResult
- Inherits HistoryItem
- Private _searchTerm As String
- Private _sortOrder As SortOrder
- Private _sortedColumn As DataGridViewColumn
- Public ReadOnly Property SearchTerm As String
- Get
- Return _searchTerm
- End Get
- End Property
- Public ReadOnly Property SortOrder As SortOrder
- Get
- Return _sortOrder
- End Get
- End Property
- Public ReadOnly Property SortedColumn As DataGridViewColumn
- Get
- Return _sortedColumn
- End Get
- End Property
- Public Sub New(title As String, searchTerm As String, sortOrder As SortOrder, sortedColumn As DataGridViewColumn)
- MyBase._title = title
- MyBase._identifier = 2
- Me._searchTerm = searchTerm
- Me._sortOrder = sortOrder
- Me._sortedColumn = sortedColumn
- End Sub
- End Class
- End Class
Und dies nutze ich in folgenden Formen:
VB.NET-Quellcode
- Dim objHistoryItemSearchResult As HistoryItem.HistoryItemSearchResult = DirectCast(e, HistoryItem.HistoryItemSearchResult)
- GlobalNeededFunctions.SearchInDatabaseCmplExp(objHistoryItemSearchResult.SearchTerm)
- TabSearch.RestoreSorting(objHistoryItemSearchResult)[/code]
- [code]Public Shared Sub RestoreSorting(e As HistoryItem.HistoryItemSearchResult)
- ...
- newColumn = dgv.Columns(e.SortedColumn.Name)
- ...
VB.NET-Quellcode
- Public Sub OpenEntry(e As HistoryItem)
- ...
- Dim id As Integer = e.Identifier
- ...
- Select Case id
- Case 0
- ' MovieDetail-Window
- OpenMovieDetails(DirectCast(e, HistoryItem.HistoryItemWindow))
- Case 1
- ' MovieEdit-Window
- OpenEditMovie(DirectCast(e, HistoryItem.HistoryItemWindow))
- Case 2
- ' SearchTab
- ...
- End Select
- ...
- End Sub
Ich habe also eine übergeordnete Klasse "HistoryItem" mit zwei Attributen, welche die beiden Klassen "HistoryItemWindow" und "HistoryItemSearchResult" gemeinsam haben. Die beiden Klassen haben aber natürlich auch Attribute, die sich speziell auf sie beziehen. Ich brauche z.B. keinen "SearchTerm" bei einem "HistoryItemWindow". "HistoryItemWindow" und "HistoryItemSearchResult" haben beide Konstruktoren, damit ich ein Objekt diesen Typs darüber instanziieren kann.
Jedenfalls habe ich mit dieser Lösung wohl gegen den guten Geschmack verstoßen. FxCop meint:
CA1034 Geschachtelte Typen sollten nicht sichtbar sein Schachteln Sie den Typ 'HistoryItem.HistoryItemWindow' nicht. Ändern Sie stattdessen seinen Zugriff so, dass er nicht extern sichtbar ist. MDb HistoryItem.vb 21
Wie kriege ich das sauber hin?
Grüße
concu
Edit by ~blaze~:
*Codetag zu VB.Net geändert*
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „~blaze~“ ()