Describes the site collection. The main responcibility is to describe and separate what needs to be deployed on the site collection level: - sandbox solutions - site features - security group and roles - fields - content types - user custom actions - anything else Construct your model using AddXXX() or AddHostXXX() syntax. If you have bunch of the 'plain' things to push, then use .AddDefinitionsFromStaticClassType() method. It is a good idea to avoid big model preferring small model per every reasonable operation. The final artifact separation and grouping is tootally up to you and your prpoject needs. Read more here - http://docs.subpointsolutions.com/spmeta2/models/
        public void DeployIntranet(SPSite site, Options options)
        {
            // pushing site model
            if (options.DeploySite)
            {
                var siteModel = new M2ProjectPrefixSiteModel();

                this.DeploySiteModel(site, siteModel.GetSandboxSolutionsModel());
                this.DeploySiteModel(site, siteModel.GetSiteFeaturesModel());
                this.DeploySiteModel(site, siteModel.GetSiteSecurityModel());
                this.DeploySiteModel(site, siteModel.GetFieldsAndContentTypesModel());
            }

            // pushing root web model
            if (options.DeployRootWeb)
            {
                var rootWebModel = new M2ProjectPrefixRootWebModel();

                this.DeployWebModel(site.RootWeb, rootWebModel.GetStyleLibraryModel());
                this.DeployWebModel(site.RootWeb, rootWebModel.GetModel());
            }

            // pushing 'How-tow' sub web
            if (options.DeployHowTosWeb)
            {
                var howTosWebModel = new M2ProjectPrefixHowTosWebModel();

                this.DeployWebModel(site.RootWeb, howTosWebModel.GetModel());
            }
        }
        public void CanProvisionIntranet_SiteModel()
        {
            WithCSOMContext(context =>
            {
                var siteModel = new M2ProjectPrefixSiteModel();
                var rootWebModel = new M2ProjectPrefixRootWebModel();

                var provisionService = new CSOMProvisionService();

                // site
                provisionService.DeploySiteModel(context, siteModel.GetSiteFeaturesModel());
                provisionService.DeploySiteModel(context, siteModel.GetUserCustomActionModel());
                provisionService.DeploySiteModel(context, siteModel.GetSiteSecurityModel());

                provisionService.DeploySiteModel(context, siteModel.GetFieldsAndContentTypesModel());
                provisionService.DeploySiteModel(context, siteModel.GetSandboxSolutionsModel());

                // root web
                provisionService.DeployWebModel(context, rootWebModel.GetStyleLibraryModel());
                provisionService.DeployWebModel(context, rootWebModel.GetModel());
            });
        }