-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base #1
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.
лучше в следующей вариации
![<description-text>](<path-to-file>)
No description provided.