Posso inserire questo meccanismo di filtraggio dei pacchetti in una fabbrica?

1

Questo pezzo di codice è in molti dei miei metodi, in una certa area del codice base. Non sta violando DRY poiché è un po 'diverso per ogni metodo. Ma mi dà ancora fastidio che 5-8 righe di codice come questo siano in ogni metodo.

Quindi voglio nasconderlo :) La domanda è come.

//e.g /configurators/configjohn/defaultfrontend/active/somejsonfile_versionumber.json
var packageFilter = PackagePath.Filter
    .AddPathFilter(StorageConstants.UICONFIGURATION_BASE_CONTAINER)
    .AddPathFilter(configurationName.ToLowerInvariant())
    .AddPathFilter(uiConfigInfo.Name.ToLowerInvariant())
    .AddPathFilter(status.ToLowerInvariant())
    .AddFilter(PackagePath.PackageVersion(uiConfigInfo.Version))
    .Get();

Ho pensato a una fabbrica in cui avrei potuto fornire il metodo come parametro e avrei recuperato un packageFilter per quel metodo.

Altri consigli?

Grazie!

UPDATE alla soluzione

Finito per creare un tipo statico come mi è stato consigliato di fare;

public class PackagePathCreator
{
    public static PackagePath CreateFilter(string configurationName, string segment, string status, string uiConfigName)
    {
        var packageFilters = PackagePath.Filter;

        if (!string.IsNullOrEmpty(segment))
            packageFilters.AddPathFilter(segment);

        if (!string.IsNullOrEmpty(configurationName))
            packageFilters.AddPathFilter(configurationName.ToLowerInvariant());

        packageFilters.AddPathFilter(StorageConstants.UICONFIGURATION_BASE_CONTAINER).
        AddPathFilter(uiConfigName.ToLowerInvariant()).
        AddPathFilter(status.ToLowerInvariant());

        return packageFilters;
    }
}
    
posta frostings 02.10.2017 - 17:11
fonte

2 risposte

3

Crea una classe helper che contenga metodi e parametri convenienti, così puoi chiamarli in diverse parti del tuo codice.

Esempio di classe helper:

class PackagePathHelper {

    public static PackagePath GetFromBaseContainer(string status, string configName, UIConfigInfo uiConfigInfo) {
        var packageFilter = PackagePath.Filter
            .AddPathFilter(StorageConstants.UICONFIGURATION_BASE_CONTAINER)
            .AddPathFilter(configName.ToLowerInvariant())
            .AddPathFilter(uiConfigInfo.Name.ToLowerInvariant())
            .AddPathFilter(status.ToLowerInvariant())
            .AddFilter(PackagePath.PackageVersion(uiConfigInfo.Version))
            .Get();
    }
}

Esempio di codice chiamante:

var packageFilter = PackagePathHelper.GetFromBaseContainer(status, configurationName, uiConfigInfo);
    
risposta data 02.10.2017 - 20:50
fonte
3

È difficile da dire, ma sembra che tu stia costruendo la stringa finale dalle impostazioni di configurazione.

Queste impostazioni sono presumibilmente in un file di configurazione. Potrebbe essere meglio memorizzare ogni stringa completa nel file di configurazione anziché archiviare le parti e quindi assemblarle nel codice.

È possibile che questo diminuisca sia il numero di variabili di configurazione AND le linee di codice. Pur consentendo anche una maggiore flessibilità nella configurazione dell'app

    
risposta data 02.10.2017 - 20:45
fonte

Leggi altre domande sui tag