[.NET, C#] Немного о велосипедах

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
14-Сен-2020 13:31

Засели мы как-то с однокурсником в 2014 году пилить стартап. Срок, результат и направленность продукта для данного текста не важны. Важно то, что клиент был мобильным приложением на Java для Android, а сервер – службой, написанной на C#, общавшейся с хранилищем данных. Далее – поучительная история седым старцам (от программирования) на потеху, безбородым юнцам – в назидание.
Для того, чтобы быть твёрдо уверенным в том, что я, как разработчик серверной части, всё контролирую, первая версия сервера была написана с помощью класса System.Net.Sockets.Socket вроде того, как это описывает статьяот Microsoft. Так как сокеты работают (в-принципе, как и все другие перечисленные дальше технологии от Microsoft, кроме WCF) на Begin/End-методах, была написана небольшая обёртка, предоставившая возможность работы с event-based моделью. Это был шаг первый, клиент с сервером прекрасно работали.
Так как весьма скоро нам потребовался SSL, пришлось перейти на уровень модели OSI повыше и переписать серверную часть с использованием класса System.Net.Sockets.TcpListener, к которому и был прикручен SSL. Это были шаги два и два с половиной, клиент с сервером прекрасно работали, клиент даже не пришлось переписывать – перехват пакетов показал, что всё ОК, ничего не изменилось.
Позже захотелось полноценного HTTPS со всеми его наворотами, для чего сервер снова переписали – теперь уже с использованием класса System.Net.HttpListener. Это шаги три и три с половиной, и снова всё хорошо работает, и снова клиент не надо переделывать. Справедливости ради надо заметить, что кроме пользовательского мобильного клиента, существовал ещё и тестовый C#-клиент и куча тестов – а вот их переписывать приходилось почём зря.
Шаг четвёртый пришёл тогда, когда свою систему мы начали масштабировать во всех направлениях, а собственные обёртки стали самым узким местом проекта. Тогда я почитал про WCF и за один вечер (ну почти) переписал всё взаимодействие. Со стороны клиента (и в пересылаемых пакетах) всё осталось по-прежнему, но код серверной части сократился с полудюжины серьёзных классов до считанных строк.
У этой истории две морали.
1. (очевидно) Изобретать велосипеды – это плохо. Если бы я сразу полез в гугл и не побоялся использовать новую для себя технологию, удалось бы сократить разработку сервера примерно на треть.
2. (и это главное) Задача по реализации одного и того же механизма с помощью разных инструментов – наилучший способ обучения, позволяющий добиться глубочайшего понимания темы. Когда ты просто проделываешь что-то несколько раз – ты это запоминаешь. Но когда при этом ты ещё каждый раз усложняешь (изменяешь) используемые инструменты, то навык оттачивается гораздо лучше.
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_.net, #_c#, #_.net, #_c#, #_wcf, #_.net, #_c#
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 23-Ноя 04:36
Часовой пояс: UTC + 5