-
Notifications
You must be signed in to change notification settings - Fork 0
base #1
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
base #1
Conversation
Я очень сильно задушнился, если честно. Так вышло, что я откладывал курсовую на потом, а потом я внезапно очень сильно простыл и выпал из жизни на неделю - пришлось делать приложение в последние вечера. Задание - в минимальной реализации ничего особенного Get/Set/New/Delete/Get для листинга вокруг каких то абстрактных данных. В остальном нужно развлекать себя самому (делать допы типа TOTP или еще чего). Наверное я бы пожелал сдать курсовую в минимальной реализации, а что то допиливать, когда появится настроение. Что сделал: два сервиса (userStorageServer - сервис авторизации пользователей и storageServer - главный сервис со всем хранилищем) и клиентское консольное приложение. Делал все максимально просто и примитивно. Вместо кук авторизации jwt токен с userId. Все сущности в хранилище определяются комбинацией id и userID. В Начале запускается сервис userStorageServer. В нем генерируется список пустых строк с единственной заполненой ячейкой secret. (наверное ближайшая аналогия - это ключи активации винды, подразумевается, что все пользователи знают свои ключи и ключи заранее вбиты в базу). Через свое консольное приложение пользователь может либо создать аккаунт (SignIn), либо авторизоваться (logIn) и получить свой токен. Дальше токен прикладывается к запросам к сервису storageServer. Модель хранения данных: массив байт для самих данных, массив байт для meta информации, флажок типа данных. Все сервисы взаимодействуют друг с другом через gRPC. Когда сервис storageServer получается запрос, он достает jwt из контекста и идет в сервис userStorageServer для авторизации и получения userID, по которому дальше делает манипуляции с пользователем. Все данные приводятся к массиву бит, самая примитивная модель и простая была выбрана. |
Не знаю, чувство, что курсвая в плане идеи уступает прошлой. В той был какой то намек на взаимодействие двух микросервисов, какой то поллинг операций был и намек на отказоустойчивость (связанную с поллингом). А это курсовая какая то бездушная и очень формальная, но может я не прав или чего то не понял. Хочется быстрее смержить и забыть и не писать заурядные хендлеры и обертки над бд, уже в четвертый раз пишу их. |
Доки не делал и тестами особо не покрывал специально, времени из за болезни мало было и если что доделаю эти все украшательства после первого ревью. |
08620e0
to
3253ce7
Compare
ed8dde3
to
a2e5f85
Compare
bf080c5
to
ecef0d8
Compare
134d9bf
to
fdce9d5
Compare
) | ||
|
||
var ( | ||
tryAgainStr = "Try again." |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
возможное улучшение:
описание переходов UI описатье через "конечный автомат"/"машину состояний"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
не понял. Можно какой нибудь маленький пример на псевдокоде.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
схематично выглядит примерно так
в единиицу времени из текущего состояния есть возможность перехода в новое или завершения работы
реализуется на основе графов
статейка для ознакомления
статейка для ознакомления-2
такой подход унифицирует описание всех возможных кейсо работы приложения, UI в том числе
дополнение, как можно улучшить сервис
или просто взять идея на вооружение в ситуациях, которые могут встретиться в будущем
|
3552108
to
f7aa18d
Compare
Limit int32 | ||
} | ||
|
||
type Interface interface { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
необходимо указать более емкое название, указывающее на то, как и для чего используется данное описание
например, Storager, Repository, etc
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
cmd/userServer/storage/interface.go
Outdated
Secret string | ||
} | ||
|
||
type Interface interface { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
необходимо указать более емкое название, указывающее на то, как и для чего используется данное описание
например, Authorizator, IAuth, UserManager, etc
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
) | ||
|
||
var ( | ||
tryAgainStr = "Try again." |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
схематично выглядит примерно так
в единиицу времени из текущего состояния есть возможность перехода в новое или завершения работы
реализуется на основе графов
статейка для ознакомления
статейка для ознакомления-2
такой подход унифицирует описание всех возможных кейсо работы приложения, UI в том числе
дополнение, как можно улучшить сервис
или просто взять идея на вооружение в ситуациях, которые могут встретиться в будущем
|
||
## Сценарий работы | ||
|
||
[Cхема](Model.jpg) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
лучше в следующей вариации

No description provided.