Rimozione di Obsession Primitive e denominazione delle classi create [duplicate]

-1

Sto imparando l'ossessione primitiva. Si prega di vedere l'oggetto valore di seguito:

public class UserName
{
    private readonly string value;

    public UserName(string value)
    {
        if (value == null)
            throw new ArgumentNullException("value");
        if (!UserName.IsValid(value))
            throw new ArgumentException("Invalid value.", "value");

        this.value = value;
    }

    public static bool IsValid(string candidate)
    {
        if (string.IsNullOrEmpty(candidate))
            return false;

        return candidate.Trim().ToUpper() == candidate;
    }

    public static bool TryParse(string candidate, out UserName userName)
    {
        userName = null;
        if (string.IsNullOrWhiteSpace(candidate))
            return false;

        userName = new UserName(candidate.Trim().ToUpper());
        return true;
    }

    public static implicit operator string(UserName userName)
    {
        return userName.value;
    }

    public override string ToString()
    {
        return this.value.ToString();
    }

    public override bool Equals(object obj)
    {
        var other = obj as UserName;
        if (other == null)
            return base.Equals(obj);

        return object.Equals(this.value, other.value);
    }

    public override int GetHashCode()
    {
        return this.value.GetHashCode();
    }
}

che ho preso da qui: link

Dire che la classe Root aggregato è: Cliente. Sarebbe "meglio" nominare in questo modo:

CustomerName
CustomerEmail
CustomerZipCode
etc

Dire anche che un cliente ha una lista di ordini, che contiene prodotti. Come denominare la classe Descrizione del prodotto? Le due opzioni sono:

Description
ProductDescription
    
posta w0051977 12.12.2017 - 10:48
fonte

1 risposta

0

Non c'è nulla% specifico didomain-driven-design o specifico primitivo su come devono essere denominati quei tipi di valore.

In genere, scegli i nomi che esprimono la semantica del valore, piuttosto che i dettagli di convalida o implementazione. All'interno del modello di dominio, tali semantiche sono in genere limitate a query che hanno un significato all'interno del modello di dominio stesso ( Balance , ad esempio, per descrivere lo stato di fatturazione corrente di un Account ); al limite quelle semantiche sono in genere limitate a query che producono rappresentazioni agnostiche di dominio TimeStamp.toIso8601()

Spesso accade che i domini crud abbiano un certo numero di tipi che non hanno alcuna semantica interessante. "Nome", "Descrizione", "Indirizzo email" sono comunemente utilizzati per i dati che il modello di dominio non controlla mai direttamente. Probabilmente non hai bisogno di implementazioni separate per CustomerName e ProductName se il modello di dominio non le tratta diversamente.

potresti voler digitare aliasing, in un contesto in cui esistono due valori di Name diversi che vuoi evitare di confondere. Ecco una discussione a aliasing in C # .

Parte del punto delle è che la lingua nel codice dovrebbe essere in stretto allineamento della lingua nel business. Quindi la risposta "reale" è: prestare una stretta e attenta attenzione alla lingua utilizzata dagli esperti del dominio e abbinare le parole a quelle che riesci a gestire.

    
risposta data 12.12.2017 - 16:26
fonte

Leggi altre domande sui tag