@kezeze

Как правильно проектировать многопользовательское приложение?

Здравствуйте.

Есть некое C# приложение на сервере, которое обрабатывает задачи различных пользователей, обрабатывает их параллельно, используя многопоточность. Данное приложение состоит из набора классов, например, класс, получающий список активных пользователь, класс, обрабатывающий пользователя, класс, получающий задачи пользователя, выполняющий задачу, оформляющий результат.
Так вот...
При работе приложения необходимо помнить информацию о пользователе, который обрабатывается (например, даже хотя бы для логгирования, мол выполняется такая-то задача такого-то пользователя). Получается, что все разрабатываемые классы должны содержать в себе ссылку на пользователя?
Мол... Класс ПолучательПользователей определяет набор пользователей и для каждого пользователя создать экземпляр класс ОбработчикПользователя(Пользователь), затем в этом обработчике определяется список активных задач для пользователя и создаётся экземпляр класса ОбработчикЗадачи(Задача, Пользователь)... и так далее, и далее...
Т.е. выходит что всё в программе, что бы оно не делало, должно уточняться пользователем (хранить ссылку полем, передавать в конструкторе, где-то в методе), как на примере ОбработчикаЗадачи, который обрабатывает задачу, возвращает результат и ему вроде и всё равно для какого пользователя задача, но всё же хотя бы для того же логгирования передавать информацию о пользователе надо... А ведь вложенность классов может быть глубже, но выходит для всего надо тянуть пользователя.

Это такой упрощённый пример, надеюсь, что вопрос понятен. Суть в том, что правильно ли это, так ли оно обычно бывает или же это неправильный подход, тут какая-то принципиальная ошибка.
  • Вопрос задан
  • 171 просмотр
Пригласить эксперта
Ответы на вопрос 1
@BadElectrician
C++ это хобби
Как я понял речь идёт о необходимости создания правильной архитектуры приложения. Далее вы упоминаете о наборе классов, предназначенных для выполнения различных задач, но связанные между собой выполнением главной цели всего приложения. Может кто-то предложит вам нечто иное, но я предлагаю вам рассмотреть каждый класс как микросервис. Что это такое и как работать с набором микросервисов хорошо описано в книге Крисиана Хорсдала (Kristian Horsdal) Микросервисы на платформе .NET, а по архитектуре приложения можно почитать или послушать здесь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы