Сделать конструктор предупредить разработчика о неправильной стоимости? - PullRequest
0 голосов
/ 28 сентября 2010
Private _bgWorker As BackgroundWorker = Nothing
Private _bgWorkerMessage As String = String.Empty
Private _bgPercentComplete As Integer = 0
Private _dictQueries As Dictionary(Of String, String) = New Dictionary(Of String, String)

Public Sub New()
    _dictQueries.Add("IPB", "")
    _dictQueries.Add("Figure", "")
    _dictQueries.Add("Part", "")
    _dictQueries.Add("Tags", "")
End Sub

Public Sub New(ByRef bgWorker As BackgroundWorker)
    Me.New()
    _bgWorker = bgWorker
End Sub

Public Sub New(ByVal dictQueries As Dictionary(Of String, String))
    Me.New()
    If Not dictQueries.ContainsKey("IPB") Or Not dictQueries.ContainsKey("Figure") Or Not dictQueries.ContainsKey("Part") Or Not dictQueries.ContainsKey("Tags") Then
        'I want to throw an exception/warning right here, or make it error out'
    End If
    _dictQueries = dictQueries
End Sub

Public Sub New(ByRef bgWorker As BackgroundWorker, ByVal dictQueries As Dictionary(Of String, String))
    Me.New(bgWorker)
    If Not dictQueries.ContainsKey("IPB") Or Not dictQueries.ContainsKey("Figure") Or Not dictQueries.ContainsKey("Part") Or Not dictQueries.ContainsKey("Tags") Then
        'I want to throw an exception/warning right here, or make it error out'
    End If
    _dictQueries = dictQueries
End Sub

Моя цель - создать класс, который может импортировать файлы одинакового типа и структуры в любую базу данных, если установлены соединение и запросы.У нас есть «общая» схема базы данных, но всякий раз, когда мы создаем приложения SQLite, не гарантируется, что разработчик будет использовать ту же схему.Итак, в главном конструкторе я собираюсь определить общие запросы.Но если они определяют запросы, я хочу убедиться, что есть четыре конкретных, так как они будут единственными, которые я использую.Теперь я хотел проверить это в конструкторе, чтобы, возможно, разработчик поймал его.Это бессмысленно для пользователя, потому что тогда продукт не должен был быть выпущен.Итак, есть ли способ проверить параметр в конструкторе, чтобы убедиться, что он «действителен».Я знаю, что Visual Studio делает это автоматически с типом, но я не знаю, есть ли способ проверить значения, чтобы убедиться, что они нужны.Все, что я хочу сделать, это выдать предупреждение, а не препятствовать его построению (они могут передавать значение, которое создается из базы данных, кто знает).

Ответы [ 2 ]

2 голосов
/ 28 сентября 2010

Я видел, что это называется "Струнная типизация" в другом SO-потоке.Нет, невозможно, вы не можете узнать, что содержит строка, до времени выполнения.Даже ценность тестирования этого во время выполнения сомнительна, могло быть много больше неправильных с оператором запроса.Похоже, вы заново изобретаете хранимые процедуры, подумайте об использовании для них поддержки движка dbase.

0 голосов
/ 28 сентября 2010

Нет, я думаю, что самое близкое, что вы можете получить, это на самом деле строго набрать параметры.Создайте IPBString, FigureString и т. Д., Чтобы у разработчиков не было другого выбора, кроме как передать правильные вещи.Это кажется немного излишним, хотя.Как насчет использования кодовых контрактов ?

...