Simple-backend -------------------- Projet structure Backend - Core - Services usersvc, imagesvc, etcsvc ``` Browser WebHandler Services DataStore | | | | |-request------>| | | | | | | | |-call-------->| | | | | | | | |-query-------->| | | | | | | |<---------data-| | | | | | |<------return-| | | | | | |<-----response-| | | | | | | | | | | Browser WebHandler Services DataStore ``` (Browser), (WebHandler), (Services), (DataStore) in MVC we have Model View Controller in same "project" despite this is some what organized it will tie some logic to project, in most projects this is also fine, but ends up later to some recoding in different projects repeat all over again. Also in regular .NET web projects we have ``` Persistence: Proj.Data.Contacts Model Proj.Data ModelRepository Logic: Proj.Business ModelBO Proj.Web Controllers Views ``` as Views are Processed and sent to browser, Controllers receive request and go to ModelBO retrieving Contacts, it return a view which are processed and sent back to server The goal: Create independent contexts: ``` Persistence: Pkg.DataStore - persistence UserService: Pkg.UserModel Pkg.UserLogic (service entry point) ImageService: Pkg.ImageModel Pkg.ImageLogic ``` The caller must be independent from browser, we can create different front ends such as CLI. Service can require more than one Querier, we can create virtual DB with tables Logic: WebProject ViewModel Controllers Views (cshtml) DataStore data persistence Service performs logic, validation, authorization Communication receives tests ---- With independent services we should have a maincore: ```go //Core will prepare the database, session etc core.Session(); core.User().Login etc ```