Conversation
ODB & ORM + Authenticator SHA3 hashing, secure comparison, 32 bytes salt + MapProvider Class for storing playing fields
leshiy1295
left a comment
There was a problem hiding this comment.
Код хорошего качества!
Есть пара небольших замечаний и предложение использовать конфигурационные файлы для подключения к БД. Тут, к сожалению, особо нет паттернов пока что (архитектура довольно простая) - можете внедрить идиому PIMPL, например, а также оценить масштабируемость Вашего решения. Тогда формально Вашу работу можно будет оценить по всем трём обязательным модулям (логика, библиотеки и паттерны).
| #pragma once | ||
|
|
||
| #include <string> | ||
| #include <boost/tr1/memory.hpp> |
There was a problem hiding this comment.
лучше делать так:
- в header-файлы не выносить зависимости реализации - сейчас Вы требуете от всех потенциальных клиентов Вашей библиотеки иметь boost и odb, что, кажется, для публичных интерфейсных методов несколько излишне - ведь реализовать их можно и на обычных файлах или даже в памяти...
- пользоваться идиомой PIMPL для сокрытия реализации - сейчас же мы видим всю приватную часть интерфейса, а при добавлении нового - придётся перекомпилировать и другие файлы проекта
| private: | ||
| friend class User; | ||
|
|
||
| std::tr1::shared_ptr <odb::core::database> db; |
|
|
||
| // CONSTRUCTOR // | ||
| AuthenticationManager::AuthenticationManager() { | ||
| this->db = std::tr1::shared_ptr<database>(new odb::pgsql::database( |
| typedef odb::query<User> Query; | ||
| typedef odb::result<User> Result; | ||
|
|
||
| transaction t(db->begin()); |
There was a problem hiding this comment.
зачем это?
и даже если Вы её тут открываете зачем-то, то не закрываете...
| * @attention DEMO ONLY! | ||
| */ | ||
| namespace PrivateData { | ||
| const string DB_USER = ""; |
There was a problem hiding this comment.
обычно для этого пользуются конфигурационными файлами
как с ними работать - можно, например, посмотреть в лекции про Boost
| User(const string &name, const string &password) | ||
| : name(name), is_admin(false) { | ||
|
|
||
| salt = AuthenticationManager::gen_salt(); |
There was a problem hiding this comment.
можно использовать this->set_password...
| */ | ||
| bool AuthenticationManager::user_exists(const string &name) { | ||
| typedef odb::query<User> Query; | ||
| typedef odb::result<User> Result; |
There was a problem hiding this comment.
Метод можно будет использовать при регистрации пользователей. Предполагается, что регистрируясь, пользователь может получить информацию, существует ли пользователь с его именем. Оформлен в виде отдельного метода так как есть мысли, как можно будет оптимизировать проверку существования.
| cout << elem << '\t'; | ||
| } | ||
| cout << endl; | ||
| } |
There was a problem hiding this comment.
если это тест, то следует проводить сравнение с тем, что импортировали :)
| */ | ||
| #pragma db object table("users") | ||
|
|
||
| class User { |
There was a problem hiding this comment.
сейчас у Вас сущность User жёстко привязана к PSSQL
возможно, стоит выделить отдельный интерфейс и работать через него.
Тут же создать определённого наследника (или скрытую реализацию), работающего именно через PSSQL. Это более расширяемо
ODB & ORM
SHA3 hashing, secure comparison, 32 bytes salt
Class for storing playing fields