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 шт):
Наверное, чтобы удобнее было использовать и не нарушать SRP из SOLID, так как класс Message по идее просто должен содержать данные и ничего больше не уметь.
public static class MessageExtension
{
public static void Send(this Message message)
{
// ... здесь достать данные из message и отправить
}
}
Тогда можно будет писать такой код
Message message = new Message(...);
message.Send();
Но здесь можно и без экстеншна обойтись. Я просто показал, как оно возможно.