Extension методы

У меня есть метод

public void SendNewClntMess(string host, int port)
{
    try
    {



        string data = $"New client connected host {host} | port {port}   ";
        if (string.IsNullOrEmpty(data)) return;

        Send("#Cln&" + data);
    }
    catch (Exception ex)
    {
        throw new Exception(ex.Message + "Ошибка при отправке сообщения о добавлении клиента!");
    }
}

и метод

public void Send(string data){
            try
            {
                byte[] buffer = Encoding.UTF8.GetBytes(data);
                int bytesSent = _serverSocket.Send(buffer);
            }
            catch { pf.Print("Server disconnected"); }
        }

Метод Send принимает string, сообщение, но мой руководитель говорит, что я должен использовать не строковое значение, а сделать класс message и использовать его, а для этого нужно использовать Extensions метод что-то вроде этого

public class Message
{
    public string Sender { get; set; }
    public string Destination { get; set; }
    public string Host { get; set; }
    public string Port { get; set; }


    public string ToStrMes(string str)
    {
        str = str.Split('&')[0];
        return str;
    }

    public override string ToString()
    {
        return $"{Sender}|{Destination}|{Host}|{Port}";
    }
}

public static class MessageExtension
{
    public static Message toMessage(this string message)
    {
        Message recievedMessage = new Message();
        var args = message.Split('|');
        recievedMessage.Sender = args[0];
        recievedMessage.Destination = args[1];
        recievedMessage.Host = args[2];
        recievedMessage.Port = args[3];
        return recievedMessage;
    }

} Но вопрос зачем и как использовать, если у меня неплохо и строка передаётся. И ещё он сказал, что нужно использовать extensions для этого куска кода

            byte[] buffer = Encoding.UTF8.GetBytes(data);
            int bytesSent = _serverSocket.Send(buffer);

Назвать класс Decoder и вызывать объект этого класса, вместо

        byte[] buffer = Encoding.UTF8.GetBytes(data);
        int bytesSent = _serverSocket.Send(buffer);

Как это делает и зачем?


Ответы (1 шт):

Автор решения: aepot

Наверное, чтобы удобнее было использовать и не нарушать SRP из SOLID, так как класс Message по идее просто должен содержать данные и ничего больше не уметь.

public static class MessageExtension
{
    public static void Send(this Message message)
    {
        // ... здесь достать данные из message и отправить
    }
}

Тогда можно будет писать такой код

Message message = new Message(...);
message.Send();

Но здесь можно и без экстеншна обойтись. Я просто показал, как оно возможно.

→ Ссылка