Define responsibility for saving settings (controller, services and cards)

EDIT:

Because I was late with the initial generosity 300for @arcain, I reopen. And the assignment is optional 150for @arcain. Unless, of course, someone does not give even a better answer. :)

/ EDIT

Consider the following view:

language | region | active | default |
-----------------------------------------------
en       | GB     | [x]    | (*)     | [X delete]
nl       | NL     | [x]    | ( )     | [X delete]
nl       | BE     | [x]    | ( )     | [X delete]

[x] let visitors browser-settings determine the default language

[save]

The settings of the above table will be saved in the database table, the columns of which are mapped to the above columns (with the exception of the last column).

All (save and delete) actions directly to the localization controller. The localization controller basically calls methods in the LocalizationService, for example:

$localizationService->updateCollection( $_POST ) // update collection settings
// or
$localizationService->delete( $_POST ) // delete a single locale

LocalizationService in it calls a call to LocaleMapperDb, something like this:

foreach( $localeCollection as $locale )
{
    $localeMapperDb->update( LocaleModel $locale );
}
// or
$localeMapperDb->delete( LocaleModel $locale );

If, however, the responsibility for maintaining this parameter is:

[x] let visitors browser-settings determine default language

DB, site_settings. :

  • SiteService/SiteSettingsService LocalizationController. LocalizationService .
  • SiteMapperDb/SiteSettingsMapperDb LocalizationService updateCollection ($ _POST)
  • SiteMapperDb/SiteSettingsMapperDb LocaleMapperDb

, . ? , , , ?

+3
1

, .

(, #, ) ( .) , LocalViewModel, .

LocaleConfigController , , LocaleConfigViewModel, , .

, , , LocaleConfigViewModel. LocaleConfigViewModel ILocaleConfigService ISystemConfigService. , ( ).

, locale - , - , , . , , - , .

, ( .) , , , , , .

, : , - - , LocaleConfigViewModel .

, LocaleConfigViewModel ( ISystemConfigService), .

class LocaleViewModel
{
  public int Id;
  public string Language;
  public string Region;
  public bool Enabled;
  public bool Deleted;
}

class LocaleConfigViewModel
{
  public bool UseVisitorBrowserLocale;
  public LocaleViewModel DefaultLocale;
  public List<LocaleViewModel> Locales; 
}

class LocaleConfigController : ILocaleConfigController
{
  ILocaleConfigService localeConfig;
  ISystemConfigService systemConfig;

  public void Save(LocaleConfigViewModel model)
  {
    foreach (var locale in model.Locales)
    {
      if (locale.Deleted)
      {
        localeConfig.DeleteLocale(locale);
        continue;
      }
      localeConfig.UpdateLocale(locale);
    }
    systemConfig.DefaultLocaleId = model.DefaultLocale.Id;
    systemConfig.UseVisitorBrowserLocale = model.UseVisitorBrowserLocale;
  }

  public LocaleConfigViewModel GetCurrentView()
  {
    var model = new LocaleConfigViewModel();
    model.Locales = localeConfig.Locales;
    model.DefaultLocale = model.Locales.FirstOrDefault(l => l.Id == systemConfig.DefaultLocaleId);
    model.UseVisitorBrowserLocale = systemConfig.UseVisitorBrowserLocale;
    return model;
  }

  // ...
}

interface ILocaleConfigController
{
  void Save(LocaleConfigViewModel model);
  LocaleConfigViewModel GetCurrentView();
  // ... 
}

interface ILocaleConfigService // services will be stateless and threadsafe
{
  void DeleteLocale(LocaleViewModel locale);
  void UpdateLocale(LocaleViewModel locale);
  List<LocaleViewModel> Locales { get; }
  // ...
}

interface ISystemConfigService // services will be stateless and threadsafe
{
  int DefaultLocaleId { get; set; }
  bool UseVisitorBrowserLocale { get; set; }
  // ...
}
+2

Source: https://habr.com/ru/post/1785999/


All Articles