2010-09-28 4 views
0
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

Я видел это под названием «Stringy typing» в другом потоке SO. Нет, невозможно, вы не можете узнать, что содержит строка до выполнения. Даже ценность тестирования во время выполнения iffy, может быть еще много чего-то не так с оператором запроса. Кажется, вы заново изобретаете хранимые процедуры, подумайте об использовании поддержки движка dbase для них.

+0

Причина в том, что мы пытаемся сохранить все решения в коде, поэтому, когда мы распространяем продукт, менее вероятно, что конечный пользователь может увидеть логику, лежащую в его основе. Безопасность работы. :) Не мое решение, хотя. :( – XstreamINsanity

0

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

Смежные вопросы