Мне нужен класс, который определяет, какой тип сетевого соединения будет выполняться.
Сетевое соединение может быть либо Domain
присоединением, либо Workgroup
объединением.
В случае Workgroup
объединения мне нужно знать только Name
рабочей группы для присоединения.
В случае Domain
объединения мне нужно знать Name
домен для присоединения, а также Username
и Password
для использования (давайте проигнорируем все опасения по поводу безопасности здесь, это сценарий).
Затем я хочу создать для него пользовательский интерфейс WPF, подобныйэто:
http://documents.weber.edu/ctctools/sccm/images/osdnotes/9.png
, где часть учетных данных GUI становится отключенной, если пользователь выбирает соединение Workgroup
и включается, когда он выбирает соединение Domain
(с тем же самымсказал относительно имени фактической рабочей группы / домена, к которому нужно присоединиться).
И я хочу иметь возможность сериализовать / десериализовать эти данные (опять же игнорировать проблемы безопасности, это сценарий).
У меня есть два варианта:
Вариант 1
CreatЭто решение, похожее на:
enum JoinType
{
Domain,
Workgroup
}
class NetworkJoin
{
JoinType JoinType {get; set;}
string Name {get;set;}
string Username {get;set;}
SecureString Password {get;set;}
void Join()
{
// Join code for domain + workgroup
}
}
Это позволило бы мне легко выполнить TextBoxUsername.IsEnabled = ViewModel.NetworkJoin.JoinType == JoinType.Domain
.
Однако, поскольку экземпляр класса сериализован / десериализован, он позволяет экземпляру этого классаиметь JoinType = JoinType.Workgroup
, а также Username
/ Password
, и это предположение (хотя и логичное), что то, что нужно сделать для присоединения к сети, основано на проверке JoinType
(а не, скажем, * 1044)*)
Что подводит меня к варианту 2
Вариант 2
Что-то похожее на:
interface INetworkJoin
{
string Name {get;set;}
void Join();
}
class DomainJoin : INetworkJoin
{
string Name {get;set;}
string Username {get;set;}
SecureString {get;set;}
void Join()
{
// Domain join code
}
}
class WorkgroupJoin : INetworkJoin
{
string Name {get;set;}
void Join()
{
// Workgroup join code
}
}
Теперь это невозможнодля вас, чтобы создать объект с неправильными свойствами или любым предположением о том, какой тип соединения будет выполняться, потому что мы передали неоднозначные параметры.
На самом деле, обычно это было бы гораздо лучшим решением.За исключением привязки его к пользовательскому интерфейсу.
Моя ViewModel в основном будет иметь сетевой INJoJoin NetworkJoin, что означает, что мой View будет видеть только INetworkJoin. необходимо , чтобы знать конкретный тип, чтобы определить, показывать или не показывать объекты учетных данных, ему нужно привязать TextBox имени пользователя к свойству Username (которого у INetworkJoin нет ...),то же самое для пароля и т. д.
Резюме
Если кажется, что ни одно из решений не является действительно подходящим.Первый обеспечивает неоднозначное соединение, а второй потребует выяснения конкретного типа интерфейса, а также доступа к свойствам, доступным только в конкретном типе.
Я думаю, что должно быть лучшее решение, чем любой изэто, но это действительно все, что я могу думать.
Любая помощь будет оценена.