Introduce proper HandlerFactory and reduce dependencies of RequestWorker
Этот коммит содержится в:
родитель
7c7b8bf5ed
Коммит
bae6ae73bf
@ -18,6 +18,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "handlerfactory.h"
|
||||
#include "handler.h"
|
||||
#include "handlerdefault.h"
|
||||
@ -31,72 +32,51 @@ SOFTWARE.
|
||||
#include "handlercategory.h"
|
||||
#include "handlerhistory.h"
|
||||
#include "handlerpagedelete.h"
|
||||
class Factory
|
||||
|
||||
std::unique_ptr<Handler> HandlerFactory::createHandler(const std::string &action, Session &userSession)
|
||||
{
|
||||
Template &templ;
|
||||
Database &db;
|
||||
Session &userSession;
|
||||
UrlProvider &urlProvider;
|
||||
ICache &cache;
|
||||
HandlerConfig &handlerConfig;
|
||||
public:
|
||||
|
||||
Factory(HandlerConfig &handlerConfig, Template &templ, Database &db, Session &usersession, UrlProvider &urlprovider, ICache &cache) : handlerConfig(handlerConfig), templ(templ) ,db(db), userSession(usersession), urlProvider(urlprovider), cache(cache) { }
|
||||
|
||||
template<class T>
|
||||
inline std::unique_ptr<T> produce()
|
||||
{
|
||||
return std::make_unique<T>(handlerConfig, templ, db, userSession, urlProvider, cache);
|
||||
}
|
||||
};
|
||||
|
||||
std::unique_ptr<Handler> createHandler(const std::string &action, HandlerConfig &handlerConfig, Template &templ, Database
|
||||
&db, Session &usersession, UrlProvider &urlprovider, ICache &cache)
|
||||
{
|
||||
|
||||
Factory producer(handlerConfig, templ, db, usersession, urlprovider, cache);
|
||||
|
||||
if(action == "" || action == "index")
|
||||
{
|
||||
return producer.produce<HandlerDefault>();
|
||||
}
|
||||
if(action == "show")
|
||||
{
|
||||
return producer.produce<HandlerPageView>();
|
||||
}
|
||||
if(action == "edit")
|
||||
{
|
||||
return producer.produce<HandlerPageEdit>();
|
||||
}
|
||||
if(action == "login")
|
||||
{
|
||||
return producer.produce<HandlerLogin>();
|
||||
}
|
||||
if(action == "search")
|
||||
{
|
||||
return producer.produce<HandlerSearch>();
|
||||
}
|
||||
if(action == "delete")
|
||||
{
|
||||
return producer.produce<HandlerPageDelete>();
|
||||
}
|
||||
if(action == "allpages")
|
||||
{
|
||||
return producer.produce<HandlerAllPages>();
|
||||
}
|
||||
if(action == "allcategories")
|
||||
{
|
||||
return producer.produce<HandlerAllCategories>();
|
||||
}
|
||||
if(action == "showcat")
|
||||
{
|
||||
return producer.produce<HandlerCategory>();
|
||||
}
|
||||
if(action == "recent")
|
||||
{
|
||||
return producer.produce<HandlerHistory>();
|
||||
}
|
||||
if(action == "" || action == "index")
|
||||
{
|
||||
return produce<HandlerDefault>(userSession);
|
||||
}
|
||||
if(action == "show")
|
||||
{
|
||||
return produce<HandlerPageView>(userSession);
|
||||
}
|
||||
if(action == "edit")
|
||||
{
|
||||
return produce<HandlerPageEdit>(userSession);
|
||||
}
|
||||
if(action == "login")
|
||||
{
|
||||
return produce<HandlerLogin>(userSession);
|
||||
}
|
||||
if(action == "search")
|
||||
{
|
||||
return produce<HandlerSearch>(userSession);
|
||||
}
|
||||
if(action == "delete")
|
||||
{
|
||||
return produce<HandlerPageDelete>(userSession);
|
||||
}
|
||||
if(action == "allpages")
|
||||
{
|
||||
return produce<HandlerAllPages>(userSession);
|
||||
}
|
||||
if(action == "allcategories")
|
||||
{
|
||||
return produce<HandlerAllCategories>(userSession);
|
||||
}
|
||||
if(action == "showcat")
|
||||
{
|
||||
return produce<HandlerCategory>(userSession);
|
||||
}
|
||||
if(action == "recent")
|
||||
{
|
||||
return produce<HandlerHistory>(userSession);
|
||||
}
|
||||
|
||||
|
||||
return producer.produce<HandlerInvalidAction>();
|
||||
return produce<HandlerInvalidAction>(userSession);
|
||||
}
|
||||
|
||||
|
@ -3,6 +3,26 @@
|
||||
#include <memory>
|
||||
#include "handler.h"
|
||||
#include "../template.h"
|
||||
class HandlerFactory
|
||||
{
|
||||
HandlerConfig &handlerConfig;
|
||||
Template &templ;
|
||||
Database &db;
|
||||
UrlProvider &urlProvider;
|
||||
ICache &cache;
|
||||
|
||||
template<class T>
|
||||
inline std::unique_ptr<T> produce( Session &userSession)
|
||||
{
|
||||
return std::make_unique<T>(handlerConfig, templ, db, userSession, urlProvider, cache);
|
||||
}
|
||||
public:
|
||||
|
||||
HandlerFactory(HandlerConfig &handlerConfig, Template &templ, Database &db, UrlProvider &urlprovider, ICache &cache) : handlerConfig(handlerConfig), templ(templ) ,db(db), urlProvider(urlprovider), cache(cache) { }
|
||||
std::unique_ptr<Handler> createHandler(const std::string &action, Session &userSession);
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
std::unique_ptr<Handler> createHandler(const std::string &action, HandlerConfig &handlerConfig, Template &templ, Database &db, Session &usersession, UrlProvider &urlprovider, ICache &cache);
|
||||
#endif // HANDLERFACTORY_H
|
||||
|
@ -133,14 +133,16 @@ int main(int argc, char **argv)
|
||||
User::setAnon(anon.value());
|
||||
|
||||
Template siteTemplate { config.templateprefix, config.templatepath, config.urls, config.configVarResolver };
|
||||
UrlProvider urlprovider { config.urls };
|
||||
UrlProvider urlProvider { config.urls };
|
||||
|
||||
|
||||
|
||||
|
||||
auto cache = createCache(config.configVarResolver);
|
||||
cache->clear();
|
||||
RequestWorker requestWorker (config.handlersConfig, *database, siteTemplate, urlprovider, *cache );
|
||||
|
||||
HandlerFactory handlerFactory { config.handlersConfig, siteTemplate, *database.get(), urlProvider, *cache.get()};
|
||||
RequestWorker requestWorker { handlerFactory, *database->createSessionDao().get(), siteTemplate };
|
||||
|
||||
auto interface = createGateway(config);
|
||||
|
||||
|
@ -68,8 +68,7 @@ Response RequestWorker::processRequest(const Request &r)
|
||||
}
|
||||
}
|
||||
|
||||
auto handler = createHandler(r.param("action"), *this->handlerConfig, *this->templ, *this->db, session, *this->urlProvider, *this->cache);
|
||||
|
||||
auto handler = handlerFactory->createHandler(r.param("action"), session);
|
||||
try
|
||||
{
|
||||
Response response = handler->handle(r);
|
||||
|
@ -9,25 +9,24 @@
|
||||
#include "urlprovider.h"
|
||||
#include "database/sessiondao.h"
|
||||
#include "cache/fscache.h"
|
||||
#include "handlers/handlerfactory.h"
|
||||
|
||||
class RequestWorker
|
||||
{
|
||||
Database *db;
|
||||
Template *templ;
|
||||
UrlProvider *urlProvider;
|
||||
ICache *cache;
|
||||
HandlerConfig *handlerConfig;
|
||||
std::unique_ptr<SessionDao> sessionDao;
|
||||
HandlerFactory *handlerFactory;
|
||||
SessionDao *sessionDao;
|
||||
|
||||
private:
|
||||
Session retrieveSession(std::string token) const;
|
||||
public:
|
||||
RequestWorker(HandlerConfig &handlerConfig, Database &db, Template &templ, UrlProvider &provider, ICache &cache)
|
||||
RequestWorker(HandlerFactory &handlerFactory, SessionDao &sessionDao, Template &templ)
|
||||
{
|
||||
this->handlerConfig = &handlerConfig;
|
||||
this->db = &db;
|
||||
this->handlerFactory = &handlerFactory;
|
||||
this->templ = &templ;
|
||||
this->urlProvider = &provider;
|
||||
this->sessionDao = db.createSessionDao();
|
||||
this->cache = &cache;
|
||||
this->sessionDao = &sessionDao;
|
||||
|
||||
}
|
||||
|
||||
|
Загрузка…
Ссылка в новой задаче
Block a user