Форум программистов, компьютерный форум, киберфорум
Наши страницы
Rius
Войти
Регистрация
Восстановить пароль
Оценить эту запись

Команда протокола формата запрос-ответ

Запись от Rius размещена 08.12.2017 в 13:45
Обновил(-а) Rius 24.01.2018 в 09:24

Минимальная писанина при применении.
Простое добавление новых команд.
Строго типизированные результаты без необходимости дополнительного приведения типов.

Использование:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using ConsoleAppRequestAnswer.Driver;
using System;
 
namespace ConsoleAppRequestAnswer
{
    class Program
    {
        static void Main(string[] args)
        {
            IDriver driver = new Driver.Driver();
 
            // answerExample is CommandExample.Answer
            var answerExample = driver.Exchange(new CommandExample(true));
 
            if (answerExample)
            {
                Console.WriteLine(answerExample.Value);
            }
        }
    }
}
Базовый класс запроса:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
 
namespace ConsoleAppRequestAnswer.Driver
{
    class RequestBase<AnswerType>
    {
        public RequestBase()
        {
            this.Query = String.Empty;
        }
 
        public string Query { get; protected set; }
 
        public virtual AnswerBase CreateAnswer(string value)
        {
            return new AnswerBase(value);
        }
    }
}
Базовый класс ответа:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
namespace ConsoleAppRequestAnswer.Driver
{
    class AnswerBase
    {
        protected bool mSuccess;
 
        public AnswerBase(string value)
        {
            this.mSuccess = false;
 
            if (!string.IsNullOrEmpty(value))
            {
                this.mSuccess = true;
            }
        }
 
        public static implicit operator bool(AnswerBase o)
        {
            return o?.mSuccess ?? false;
        }
    }
}
Пример команды:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System;
using System.Globalization;
 
namespace ConsoleAppRequestAnswer.Driver
{
    class CommandExample : RequestBase<CommandExample.Answer>
    {
        public CommandExample(bool parameter)
        {
            this.Query = Convert.ToString(parameter, CultureInfo.InvariantCulture);
        }
 
        public override AnswerBase CreateAnswer(string value)
        {
            return new Answer(value);
        }
 
        public class Answer : AnswerBase
        {
            public Answer(string value) :
                base(value)
            {
                if (this.mSuccess)
                {
                    if (bool.TryParse(value, out bool b))
                    {
                        this.Value = b;
                        return;
                    }
                }
 
                this.mSuccess = false;
                this.Value = false;
            }
 
            public bool Value { get; private set; }
        }
    }
}
Драйвер обмена:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
namespace ConsoleAppRequestAnswer.Driver
{
    interface IDriver
    {
        AnswerType Exchange<AnswerType>(RequestBase<AnswerType> request) where AnswerType : AnswerBase;
    }
 
    class Driver : IDriver
    {
        public Driver()
        {
        }
 
        public AnswerType Exchange<AnswerType>(RequestBase<AnswerType> request) where AnswerType : AnswerBase
        {
            string send = request.Query;
 
            string received = send;
 
            return (AnswerType)request.CreateAnswer(received);
        }
    }
}
Вложения
Тип файла: zip ConsoleAppRequestAnswer.zip (10.3 Кб, 37 просмотров)
Размещено в C# .Net
Просмотров 464 Комментарии 0
Всего комментариев 0
Комментарии
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru