RD>Ну как бы да, серверная и клиентская части — это совершенно разные приложения.
RD>Единственно, что их связывает — это протокол прикладного уровня. Стандартный — HTTP(s), FTP, SMTP, SSH и т.п., либо какой-то кастомный — REST over HTTP(s), SOAP over HTTP(s), GRPC over HTTP2 и т.п.
RD>И пишут их зачастую разные люди и даже на разных языках программирования.
Ага.
Значит, упаковка-распаковка данных запроса клиента (или данных ответа сервера) для передачи по протоколу — это можно считать слоем инфраструктуры.
Верно?
Сейчас, как я понял, более распространенным является REST.
RD>Собственно, нет. В том смысле, что эти объекты, конечно, нужны, но создавать каждый из них в явном виде в точке сборки не надо.
RD>Для серверной части main может быть вот таким простым:
RD>RD>// Собственно, вот и весь composition root.
RD>var config = ReadConfigFromSomeWhere();
RD>var webServer = new WebServer(new WebServerOptions { BindAddress = config.ListenAddress, Port = config.ListenPort }, new MyRouter());
RD>webServer.Start();
RD>// А уже в конструкторе WebServer может быть что-то вроде:
RD>// this._router = router; // IRouter, который приходит как параметр конструктора
RD>// this._socket = new Socket(); // сокет, на котором слушаются входящие подключения
RD>// this._inputBuffer = new Buffer(); // Буфер для входящих данных
RD>// this._outputBuffer = new Buffer(); // Буфер для исходящих данных
RD>// this._parser = new HttpProtocolParser(this._inputBuffer); // Парсер http-протокола
RD>// и т.д. и т.п.
RD>//
RD>// WebServer будет оперировать этими внутренними объектами, получать сырые байты, разбирать их в объекты HttpRequest и отдавать на обработку в заданный снаружи IRouter.Handle(httpRequest, httpResponse).
RD>
RD>Далее в реализации роутера может быть, например, так:
RD>RD>public class MyRouter: IRouter {
RD> ...
RD>}
RD>
А если я делаю свою собственную реализацию классов WebServer, IRouter, ProtocolParser, ...
Есть какая-нибудь общепринятая схема\архитектура\паттерн как должны взаимодействовать эти объекты?
И как они должны быть устроены "внутри"?