Assegnazione di un nome succintamente a un oggetto

1

Ho un oggetto che racchiude un Either<T,T[]> . Può essere solo una singola istanza di T o un array di T[] , ma non lo so al momento della compilazione. Come faccio a denominare la classe e come faccio a denominare un'istanza, ad esempio Either<string,string[]> ? Voglio descriverlo il più breve possibile.

//class name
SingularOrArray //too long
SingleOrMultiple //too long
AnyOfT //not descriptive enough

//instance name (string)
SingleOrMultipleString //too long
StringOrStrings //clumsy
AnyString //not descriptive enough
    
posta David S. 17.09.2018 - 10:28
fonte

1 risposta

1

It can only be either a single instance of T or an array of T[] but I don't know at compile time

Quindi non è necessario avere entrambi i casi nella classe. Al contrario, astraggono il loro comportamento nell'interfaccia e hanno due implementazioni di tale interfaccia. Uno per singolo oggetto e uno per un array.

public interface IDataOf<T>
{
    void Match(Action<T> match);
    void Match(Action<T[]> match);
}

public class SingleOf<T>
{
    private readonly T _data;

    public SingleOf(T data) => _data = data;

    void Match(Action<T> match)
    {
        match(_data);
    }

    void Match(Action<T[]> match)
    {
        // do nothing or throw an exception
    }
}

public class MultipleOf<T>
{
    private readonly T[] _data;

    public MultipleOf(T[] data) => _data = data;

    void Match(Action<T> match)
    {
        // do nothing or throw an exception
    }
    void Match(Action<T[]> match)
    {
        match(_data);
    }
}   

Esempio di utilizzo:

Action<string> singleMatch = item => { };
Action<string[]> multipleMatch = items => { };

var text = new[] { "one", "two", "three" };
IDataOf<string> lines = new MultipleOf<string>(text);
lines.Match(multipleMatch);

var anotherText = "only one";
IDataOf<string> sentence = new SingleOf<string>(anotherText);
sentence.Match(singleMatch);

I nomi delle classi dovrebbero essere basati sul loro comportamento.
I nomi delle variabili devono essere basati sul loro utilizzo, facili da leggere e comprendere nel contesto attuale.

Se vuoi ancora avere una lezione con entrambe le opzioni, il nome SingularOrArray è abbastanza buono e non è troppo lungo .

    
risposta data 17.09.2018 - 15:03
fonte

Leggi altre domande sui tag